diff --git a/src/app/pages/setting/setting.page.ts b/src/app/pages/setting/setting.page.ts
index 408364c..5b3cb0a 100644
--- a/src/app/pages/setting/setting.page.ts
+++ b/src/app/pages/setting/setting.page.ts
@@ -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 {
- 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 {
diff --git a/src/app/pages/tabs/tabs.page.ts b/src/app/pages/tabs/tabs.page.ts
index fa32f7a..ac968e4 100644
--- a/src/app/pages/tabs/tabs.page.ts
+++ b/src/app/pages/tabs/tabs.page.ts
@@ -1,6 +1,7 @@
import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { Haptics, ImpactStyle } from '@capacitor/haptics';
+import { Preferences } from '@capacitor/preferences';
import { SplashScreen } from '@capacitor/splash-screen';
import { Toast } from '@capacitor/toast';
import { AlertController, Platform } from '@ionic/angular';
@@ -60,32 +61,36 @@ export class TabsPage {
}
async ionViewDidEnter() {
- await SplashScreen.hide()
if (this.env.firstAppLoad) {
this.env.firstAppLoad = false;
- await this.router.navigate([this.env.startPage], { replaceUrl: true });
- await this.loadPatchNote();
+ this.env.initObservable.subscribe(async value => {
+ console.log(`tabs.page.ts - ionViewDidEnter() - initObservable value: ${value}`)
+ if (value) {
+ console.log(`tabs.page.ts - ionViewDidEnter() - env.startPage: ${this.env.startPage}`)
+ await this.router.navigate([this.env.startPage], { replaceUrl: true });
+ await this.loadPatchNote();
+ }
+ });
}
}
async loadPatchNote() {
- const storageKey = this.platform.is('ios') ? this.env.IOS_PATCH_NOTE_STORAGE_KEY : this.env.AN_PATCH_NOTE_STORAGE_KEY;
- await this.env.storageGet(storageKey).then(
- async value => {
- if (value != null) {
- this.env.notShowUpdateNotes = (value === 'yes' ? true : false);
+ const storageKey = this.platform.is('ios') ? this.env.KEY_IOS_NOT_SHOW_UPDATE_NOTES : this.env.KEY_ANDROID_NOT_SHOW_UPDATE_NOTES;
+ await Preferences.get({ key: storageKey }).then(
+ async result => {
+ if (result.value != null) {
+ this.env.notShowUpdateNotes = result.value == 'yes';
} else {
this.env.notShowUpdateNotes = false;
}
- await this.env.storageSet(storageKey, 'yes');
- if (this.env.notShowUpdateNotes === false) {
+ await Preferences.set({ key: storageKey, value: 'yes' });
+ if (!this.env.notShowUpdateNotes) {
this.env.notShowUpdateNotes = true;
- await this.showUpdateNotes();
const versionWording = this.translate.instant("VERSION_VERSION") as string;
await this.presentToast(versionWording.replace("{version}", this.env.appVersionNumber), "short", 'bottom');
}
}
- );
+ )
}
async showUpdateNotes() {
@@ -131,7 +136,7 @@ export class TabsPage {
async tapHaptic() {
if (this.env.vibration === 'on' || this.env.vibration === 'on-haptic') {
- await Haptics.impact({ style: ImpactStyle.Medium })
+ await Haptics.impact({ style: ImpactStyle.Light })
.catch(async err => {
if (this.env.debugMode === 'on') {
await Toast.show({ text: 'Err when Haptics.impact: ' + JSON.stringify(err), position: "top", duration: "long" })
diff --git a/src/app/services/env.service.ts b/src/app/services/env.service.ts
index 05c1b25..1c24c57 100644
--- a/src/app/services/env.service.ts
+++ b/src/app/services/env.service.ts
@@ -3,38 +3,52 @@ import { Injectable } from '@angular/core';
import { Device, DeviceInfo } from '@capacitor/device';
import { ThemeDetection, ThemeDetectionResponse } from '@awesome-cordova-plugins/theme-detection/ngx';
import { ScreenOrientation } from '@awesome-cordova-plugins/screen-orientation/ngx';
-import { Platform } from '@ionic/angular';
+import { LoadingController, Platform } from '@ionic/angular';
import { Storage } from '@ionic/storage-angular';
import { TranslateService } from '@ngx-translate/core';
-import * as moment from 'moment';
+import { format } from 'date-fns';
import { environment } from 'src/environments/environment';
import { Bookmark } from '../models/bookmark';
import { ScanRecord } from '../models/scan-record';
import { Toast } from '@capacitor/toast';
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' | 'pt-BR' | '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";
+export declare type ColorThemeType = 'light' | 'dark' | 'black';
+export declare type ErrorCorrectionLevelType = 'L' | 'M' | 'Q' | 'H';
+export declare type VibrationType = "on" | "off" | 'on-haptic' | 'on-scanned';
+export declare type OrientationType = 'portrait' | 'landscape';
+export declare type SearchEngineType = 'google' | 'bing' | 'yahoo' | 'duckduckgo' | 'yandex' | 'ecosia' | 'brave';
+export declare type ResultPageButtonsType = 'detailed' | 'icon-only';
+export declare type QrResultContentTypeType = "freeText" | "url" | "contact" | "phone" | "sms" | "emailW3C" | "emailDocomo" | "wifi" | "geo";
+export declare type QrCreateContentTypeType = "freeText" | "url" | "contact" | "phone" | "sms" | "emailW3C" | "emailDocomo" | "wifi" | "geo";
@Injectable({
providedIn: 'root'
})
export class EnvService {
- public appVersionNumber: string = '3.0.0';
+ public appVersionNumber: string = '4.1.0';
- public startPage: "/tabs/scan" | "/tabs/generate" | "/tabs/import-image" | "/tabs/history" | "/tabs/setting" = "/tabs/scan";
- public historyPageStartSegment: 'history' | 'bookmarks' = 'history';
- public startPageHeader: 'on' | 'off' = 'on';
- public languages: LanguageType[] = ['en', 'zh-HK', 'zh-CN', 'de', 'fr', 'it'];
+ public startPage: TabPageType = "/tabs/scan";
+ public historyPageStartSegment: HistoryPageSegmentType = 'history';
+ public startPageHeader: OnOffType = 'on';
+ public languages: LanguageType[] = ['en', 'zh-HK', 'zh-CN', 'de', 'fr', 'it', 'pt-BR', 'ru'];
public language: LanguageType = 'en';
public selectedLanguage: 'default' | LanguageType = 'default';
- public colorTheme: 'light' | 'dark' | 'black' = 'light';
- public selectedColorTheme: 'default' | 'light' | 'dark' | 'black' = 'default';
- public scanRecordLogging: 'on' | 'off' = 'on';
+ public colorTheme: ColorThemeType = 'light';
+ public selectedColorTheme: 'default' | ColorThemeType = 'default';
+ public scanRecordLogging: OnOffType = 'on';
public recordsLimit: 30 | 50 | 100 | -1 = -1;
- public showNumberOfRecords: 'on' | 'off' = 'on';
- public autoMaxBrightness: 'on' | 'off' = 'on';
- public errorCorrectionLevel: 'L' | 'M' | 'Q' | 'H' = 'M';
+ public showNumberOfRecords: OnOffType = 'on';
+ public autoMaxBrightness: OnOffType = 'off';
+ public autoOpenUrl: OnOffType = 'off';
+ public errorCorrectionLevel: ErrorCorrectionLevelType = 'M';
public qrCodeLightR: number = 255;
public qrCodeLightG: number = 255;
public qrCodeLightB: number = 255;
@@ -42,53 +56,103 @@ export class EnvService {
public qrCodeDarkG: number = 36;
public qrCodeDarkB: number = 40;
public qrCodeMargin: number = 3;
- public vibration: 'on' | 'on-haptic' | 'on-scanned' | 'off' = 'on';
- public orientation: 'default' | 'portrait' | 'landscape' = 'default';
- public notShowHistoryTutorial: boolean = false;
- public notShowBookmarkTutorial: boolean = false;
+ public vibration: VibrationType = 'on';
+ public orientation: 'default' | OrientationType = 'default';
public notShowUpdateNotes: boolean = false;
- public searchEngine: 'google' | 'bing' | 'yahoo' | 'duckduckgo' | 'yandex' = 'google';
- public resultPageButtons: 'detailed' | 'icon-only' = 'detailed';
- public showQrAfterCameraScan: 'on' | 'off' = 'off';
- public showQrAfterImageScan: 'on' | 'off' = 'off';
- public showQrAfterCreate: 'on' | 'off' = 'on';
- public showQrAfterLogView: 'on' | 'off' = 'on';
- public showQrAfterBookmarkView: 'on' | 'off' = 'on';
- public showSearchButton: 'on' | 'off' = 'on';
- public showCopyButton: 'on' | 'off' = 'on';
- public showBase64Button: 'on' | 'off' = 'on';
- public showEnlargeButton: 'on' | 'off' = 'on';
- public showBookmarkButton: 'on' | 'off' = 'on';
- public showOpenUrlButton: 'on' | 'off' = 'on';
- public showBrowseButton: 'on' | 'off' = 'on';
- public showAddContactButton: 'on' | 'off' = 'on';
- public showCallButton: 'on' | 'off' = 'on';
- public showSendMessageButton: 'on' | 'off' = 'on';
- public showSendEmailButton: 'on' | 'off' = 'on';
- public debugMode: 'on' | 'off' = 'off';
+ public searchEngine: SearchEngineType = 'google';
+ public resultPageButtons: ResultPageButtonsType = 'detailed';
+ public showQrAfterCameraScan: OnOffType = 'off';
+ public showQrAfterImageScan: OnOffType = 'off';
+ public showQrAfterCreate: OnOffType = 'on';
+ public showQrAfterLogView: OnOffType = 'on';
+ public showQrAfterBookmarkView: OnOffType = 'on';
+ public showSearchButton: OnOffType = 'on';
+ public showCopyButton: OnOffType = 'on';
+ public showBase64Button: OnOffType = 'on';
+ public showEnlargeButton: OnOffType = 'on';
+ public showBookmarkButton: OnOffType = 'on';
+ public showOpenUrlButton: OnOffType = 'on';
+ public showBrowseButton: OnOffType = 'on';
+ public showAddContactButton: OnOffType = 'on';
+ public showCallButton: OnOffType = 'on';
+ 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;
+ public readonly KEY_START_PAGE = "start-page";
+ public readonly KEY_HISTORY_PAGE_START_SEGMENT = "history-page-start-segment";
+ public readonly KEY_START_PAGE_HEADER = "start-page-header";
+ public readonly KEY_SCAN_RECORDS = "scanRecords";
+ public readonly KEY_BOOKMARKS = "bookmarks";
+ 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";
+ public readonly KEY_SHOW_NUMBER_OF_RECORDS = "showNumberOfRecords";
+ public readonly KEY_VIBRATION = "vibration";
+ public readonly KEY_ERROR_CORRECTION_LEVEL = "error-correction-level";
+ public readonly KEY_QR_CODE_LIGHT_R = "qrCodeLightR";
+ public readonly KEY_QR_CODE_LIGHT_G = "qrCodeLightG";
+ public readonly KEY_QR_CODE_LIGHT_B = "qrCodeLightB";
+ public readonly KEY_QR_CODE_DARK_R = "qrCodeDarkR";
+ public readonly KEY_QR_CODE_DARK_G = "qrCodeDarkG";
+ public readonly KEY_QR_CODE_DARK_B = "qrCodeDarkB";
+ public readonly KEY_QR_CODE_MARGIN = "qrCodeMargin";
+ public readonly KEY_AUTO_MAX_BRIGHTNESS = "auto-max-brightness";
+ public readonly KEY_AUTO_OPEN_URL = "auto-open-url";
+ public readonly KEY_SEARCH_ENGINE = "search-engine";
+ public readonly KEY_RESULT_PAGE_BUTTONS = "result-page-buttons";
+ public readonly KEY_SHOW_QR_AFTER_CAMERA_SCAN = "show-qr-after-camera-scan";
+ public readonly KEY_SHOW_QR_AFTER_IMAGE_SCAN = "show-qr-after-image-scan";
+ public readonly KEY_SHOW_QR_AFTER_CREATE = "show-qr-after-create";
+ public readonly KEY_SHOW_QR_AFTER_LOG_VIEW = "show-qr-after-log-view";
+ public readonly KEY_SHOW_QR_AFTER_BOOKMARK_VIEW = "show-qr-after-bookmark-view";
+ public readonly KEY_SHOW_SEARCH_BUTTON = "showSearchButton";
+ public readonly KEY_SHOW_COPY_BUTTON = "showCopyButton";
+ public readonly KEY_SHOW_BASE64_BUTTON = "showBase64Button";
+ public readonly KEY_SHOW_ENLARGE_BUTTON = "showEnlargeButton";
+ public readonly KEY_SHOW_BOOKMARK_BUTTON = "showBookmarkButton";
+ public readonly KEY_SHOW_OPEN_URL_BUTTON = "showOpenUrlButton";
+ public readonly KEY_SHOW_BROWSE_BUTTON = "showBrowseButton";
+ public readonly KEY_SHOW_ADD_CONTACT_BUTTON = "showAddContactButton";
+ public readonly KEY_SHOW_CALL_BUTTON = "showCallButton";
+ public readonly KEY_SHOW_SEND_MESSAGE_BUTTON = "showSendMessageButton";
+ public readonly KEY_SHOW_SEND_EMAIL_BUTTON = "showSendEmailButton";
+ 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-v40100";
+ public readonly KEY_IOS_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v40100";
+ public readonly KEY_ANDROID_PREV_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v40001";
+ public readonly KEY_IOS_PREV_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v40001";
+
public readonly APP_FOLDER_NAME: string = 'SimpleQR';
+
public readonly GOOGLE_SEARCH_URL: string = "https://www.google.com/search?q=";
public readonly BING_SEARCH_URL: string = "https://www.bing.com/search?q=";
public readonly YAHOO_SEARCH_URL: string = "https://search.yahoo.com/search?p=";
public readonly DUCK_DUCK_GO_SEARCH_URL: string = "https://duckduckgo.com/?q=";
public readonly YANDEX_SEARCH_URL: string = "https://yandex.com/search/?text=";
+ public readonly ECOSIA_SEARCH_URL: string = "https://www.ecosia.org/search?method=index&q=";
+ public readonly BRAVE_SEARCH_URL: string = "https://search.brave.com/search?q=";
+
public readonly GITHUB_REPO_URL: string = "https://github.com/tomfong/simple-qr";
public readonly GOOGLE_PLAY_URL: string = "https://play.google.com/store/apps/details?id=com.tomfong.simpleqr";
public readonly APP_STORE_URL: string = "https://apps.apple.com/us/app/simple-qr-by-tom-fong/id1621121553";
public readonly GITHUB_RELEASE_URL: string = "https://github.com/tomfong/simple-qr/releases";
public readonly PRIVACY_POLICY: string = "https://www.privacypolicies.com/live/771b1123-99bb-4bfe-815e-1046c0437a0f";
- public readonly AN_PREV_PATCH_NOTE_STORAGE_KEY = "not-show-update-notes-v20800";
- public readonly IOS_PREV_PATCH_NOTE_STORAGE_KEY = "not-show-update-notes-v20800";
- public readonly AN_PATCH_NOTE_STORAGE_KEY = "not-show-update-notes-v30000";
- public readonly IOS_PATCH_NOTE_STORAGE_KEY = "not-show-update-notes-v30000";
- private _storage: Storage | null = null;
- private _scannedData: string = '';
- private _scannedDataFormat: string = '';
- private _scanRecords: ScanRecord[] = [];
- private _bookmarks: Bookmark[] = [];
+ resultContent: string = '';
+ editingContent: boolean = false;
+ resultContentFormat: string = '';
+ scanRecords: ScanRecord[] = [];
+ bookmarks: Bookmark[] = [];
viewingScanRecords: ScanRecord[] = [];
viewingBookmarks: Bookmark[] = [];
private _deviceInfo: DeviceInfo | undefined = undefined;
@@ -99,82 +163,665 @@ export class EnvService {
public firstAppLoad: boolean = true; // once loaded, turn it false
+ initObservable: Observable;
+
constructor(
private platform: Platform,
- private storage: Storage,
+ private ionicStorage: Storage,
public translate: TranslateService,
private overlayContainer: OverlayContainer,
private themeDetection: ThemeDetection,
- private screenOrientation: ScreenOrientation
+ private screenOrientation: ScreenOrientation,
) {
this.platform.ready().then(
async _ => {
- await this.init();
+ this.initObservable = new Observable(subs => {
+ new Promise(async _ => {
+ await Device.getInfo().then(
+ value => {
+ this._deviceInfo = value;
+ }
+ );
+ await this._transferStorage();
+ console.log(`env.service.ts - constructor - _transferStorage()`)
+ await this._loadStorage();
+ console.log(`env.service.ts - constructor - _loadStorage()`)
+ subs.next(true);
+ });
+ });
}
)
}
- private async init() {
- await Device.getInfo().then(
- value => {
- this._deviceInfo = value;
- }
- )
- this._storage = await this.storage.create();
- this._storage.get("start-page").then(
- value => {
- if (value != null) {
- this.startPage = value;
+ private async _transferStorage() {
+ const oldStorage = await this.ionicStorage.create();
+ const length = await oldStorage.length();
+ if (length > 0) {
+ await oldStorage.get(this.KEY_LANGUAGE).then(
+ async value => {
+ if (value != null) {
+ this.selectedLanguage = value;
+ } else {
+ this.selectedLanguage = 'default';
+ }
+ this.toggleLanguageChange();
+ await Preferences.set({
+ key: this.KEY_LANGUAGE,
+ value: this.selectedLanguage,
+ });
+ }
+ );
+ await this.presentToast(this.translate.instant("OPTIMIZING_DATA_..."), "short", "bottom");
+ await oldStorage.get(this.KEY_START_PAGE).then(
+ async value => {
+ if (value != null) {
+ this.startPage = value;
+ } else {
+ this.startPage = '/tabs/scan';
+ }
+ await Preferences.set({
+ key: this.KEY_START_PAGE,
+ value: this.startPage,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_HISTORY_PAGE_START_SEGMENT).then(
+ async value => {
+ if (value != null) {
+ this.historyPageStartSegment = value;
+ } else {
+ this.historyPageStartSegment = 'history';
+ }
+ await Preferences.set({
+ key: this.KEY_HISTORY_PAGE_START_SEGMENT,
+ value: this.historyPageStartSegment,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_START_PAGE_HEADER).then(
+ async value => {
+ if (value != null) {
+ this.startPageHeader = value;
+ } else {
+ this.startPageHeader = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_START_PAGE_HEADER,
+ value: this.startPageHeader,
+ });
+ }
+ );
+ await oldStorage.get("RZUeHwaYWGkiNhsb5nld7vdDYE7pzRyB").then(
+ async value => {
+ if (value != null) {
+ try {
+ this.scanRecords = JSON.parse(value);
+ this.scanRecords.forEach(
+ r => {
+ const tCreatedAt = r.createdAt;
+ r.createdAt = new Date(tCreatedAt);
+ }
+ );
+ this.scanRecords.sort((r1, r2) => {
+ return r2.createdAt.getTime() - r1.createdAt.getTime();
+ });
+ } catch (err) {
+ console.error(err);
+ this.scanRecords = [];
+ }
+ }
+ await Preferences.set({
+ key: this.KEY_SCAN_RECORDS,
+ value: JSON.stringify(this.scanRecords),
+ });
+ }
+ );
+ await oldStorage.get("lB9STlXHpk7G8STLcJZNreiIxeFWPxPS").then(
+ async value => {
+ if (value != null) {
+ try {
+ this.bookmarks = JSON.parse(value);
+ this.bookmarks.forEach(
+ b => {
+ if (b.id == null) {
+ b.id = uuidv4();
+ }
+ const tCreatedAt = b.createdAt;
+ b.createdAt = new Date(tCreatedAt);
+ }
+ );
+ this.bookmarks.sort((a, b) => {
+ return ('' + a.tag ?? '').localeCompare(b.tag ?? '');
+ });
+ } catch (err) {
+ console.error(err);
+ this.bookmarks = [];
+ }
+ }
+ await Preferences.set({
+ key: this.KEY_BOOKMARKS,
+ value: JSON.stringify(this.bookmarks),
+ });
+ }
+ )
+ await oldStorage.get(this.KEY_COLOR).then(
+ async value => {
+ if (value != null) {
+ this.selectedColorTheme = value;
+ } else {
+ this.selectedColorTheme = 'default';
+ }
+ await this.toggleColorTheme();
+ await Preferences.set({
+ key: this.KEY_COLOR,
+ value: this.selectedColorTheme,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_DEBUG_MODE).then(
+ async value => {
+ if (value != null) {
+ this.debugMode = value;
+ } else {
+ this.debugMode = 'off';
+ }
+ await Preferences.set({
+ key: this.KEY_DEBUG_MODE,
+ value: this.debugMode,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_ORIENTATION).then(
+ async value => {
+ if (value != null) {
+ this.orientation = value;
+ } else {
+ this.orientation = 'default';
+ }
+ await this.toggleOrientationChange();
+ await Preferences.set({
+ key: this.KEY_ORIENTATION,
+ value: this.orientation,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SCAN_RECORD_LOGGING).then(
+ async value => {
+ if (value != null) {
+ this.scanRecordLogging = value;
+ } else {
+ this.scanRecordLogging = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SCAN_RECORD_LOGGING,
+ value: this.scanRecordLogging,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_RECORDS_LIMIT).then(
+ async value => {
+ if (value != null) {
+ this.recordsLimit = value;
+ } else {
+ this.recordsLimit = -1;
+ }
+ await Preferences.set({
+ key: this.KEY_RECORDS_LIMIT,
+ value: JSON.stringify(this.recordsLimit),
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_NUMBER_OF_RECORDS).then(
+ async value => {
+ if (value != null) {
+ this.showNumberOfRecords = value;
+ } else {
+ this.showNumberOfRecords = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_NUMBER_OF_RECORDS,
+ value: this.showNumberOfRecords,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_VIBRATION).then(
+ async value => {
+ if (value != null) {
+ this.vibration = value;
+ } else {
+ this.vibration = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_VIBRATION,
+ value: this.vibration,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_ERROR_CORRECTION_LEVEL).then(
+ async value => {
+ if (value != null) {
+ this.errorCorrectionLevel = value;
+ } else {
+ this.errorCorrectionLevel = 'M';
+ }
+ await Preferences.set({
+ key: this.KEY_ERROR_CORRECTION_LEVEL,
+ value: this.errorCorrectionLevel,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_QR_CODE_LIGHT_R).then(
+ async value => {
+ if (value != null) {
+ this.qrCodeLightR = value;
+ } else {
+ this.qrCodeLightR = 255;
+ }
+ await Preferences.set({
+ key: this.KEY_QR_CODE_LIGHT_R,
+ value: JSON.stringify(this.qrCodeLightR),
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_QR_CODE_LIGHT_G).then(
+ async value => {
+ if (value != null) {
+ this.qrCodeLightG = value;
+ } else {
+ this.qrCodeLightG = 255;
+ }
+ await Preferences.set({
+ key: this.KEY_QR_CODE_LIGHT_G,
+ value: JSON.stringify(this.qrCodeLightG),
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_QR_CODE_LIGHT_B).then(
+ async value => {
+ if (value != null) {
+ this.qrCodeLightB = value;
+ } else {
+ this.qrCodeLightB = 255;
+ }
+ await Preferences.set({
+ key: this.KEY_QR_CODE_LIGHT_B,
+ value: JSON.stringify(this.qrCodeLightB),
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_QR_CODE_DARK_R).then(
+ async value => {
+ if (value != null) {
+ this.qrCodeDarkR = value;
+ } else {
+ this.qrCodeDarkR = 34;
+ }
+ await Preferences.set({
+ key: this.KEY_QR_CODE_DARK_R,
+ value: JSON.stringify(this.qrCodeDarkR),
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_QR_CODE_DARK_G).then(
+ async value => {
+ if (value != null) {
+ this.qrCodeDarkG = value;
+ } else {
+ this.qrCodeDarkG = 36;
+ }
+ await Preferences.set({
+ key: this.KEY_QR_CODE_DARK_G,
+ value: JSON.stringify(this.qrCodeDarkG),
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_QR_CODE_DARK_B).then(
+ async value => {
+ if (value != null) {
+ this.qrCodeDarkB = value;
+ } else {
+ this.qrCodeDarkB = 40;
+ }
+ await Preferences.set({
+ key: this.KEY_QR_CODE_DARK_B,
+ value: JSON.stringify(this.qrCodeDarkB),
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_QR_CODE_MARGIN).then(
+ async value => {
+ if (value != null) {
+ this.qrCodeMargin = value;
+ } else {
+ this.qrCodeMargin = 3;
+ }
+ await Preferences.set({
+ key: this.KEY_QR_CODE_MARGIN,
+ value: JSON.stringify(this.qrCodeMargin),
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_AUTO_MAX_BRIGHTNESS).then(
+ async value => {
+ if (value != null) {
+ this.autoMaxBrightness = value;
+ } else {
+ this.autoMaxBrightness = 'off';
+ }
+ await Preferences.set({
+ key: this.KEY_AUTO_MAX_BRIGHTNESS,
+ value: this.autoMaxBrightness,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SEARCH_ENGINE).then(
+ async value => {
+ if (value != null) {
+ this.searchEngine = value;
+ } else {
+ this.searchEngine = 'google';
+ }
+ await Preferences.set({
+ key: this.KEY_SEARCH_ENGINE,
+ value: this.searchEngine,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_RESULT_PAGE_BUTTONS).then(
+ async value => {
+ if (value != null) {
+ this.resultPageButtons = value;
+ } else {
+ this.resultPageButtons = 'detailed';
+ }
+ await Preferences.set({
+ key: this.KEY_RESULT_PAGE_BUTTONS,
+ value: this.resultPageButtons,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_QR_AFTER_CAMERA_SCAN).then(
+ async value => {
+ if (value != null) {
+ this.showQrAfterCameraScan = value;
+ } else {
+ this.showQrAfterCameraScan = 'off';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_QR_AFTER_CAMERA_SCAN,
+ value: this.showQrAfterCameraScan,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_QR_AFTER_IMAGE_SCAN).then(
+ async value => {
+ if (value != null) {
+ this.showQrAfterImageScan = value;
+ } else {
+ this.showQrAfterImageScan = 'off';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_QR_AFTER_IMAGE_SCAN,
+ value: this.showQrAfterImageScan,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_QR_AFTER_CREATE).then(
+ async value => {
+ if (value != null) {
+ this.showQrAfterCreate = value;
+ } else {
+ this.showQrAfterCreate = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_QR_AFTER_CREATE,
+ value: this.showQrAfterCreate,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_QR_AFTER_LOG_VIEW).then(
+ async value => {
+ if (value != null) {
+ this.showQrAfterLogView = value;
+ } else {
+ this.showQrAfterLogView = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_QR_AFTER_LOG_VIEW,
+ value: this.showQrAfterLogView,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_QR_AFTER_BOOKMARK_VIEW).then(
+ async value => {
+ if (value != null) {
+ this.showQrAfterBookmarkView = value;
+ } else {
+ this.showQrAfterBookmarkView = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_QR_AFTER_BOOKMARK_VIEW,
+ value: this.showQrAfterBookmarkView,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_SEARCH_BUTTON).then(
+ async value => {
+ if (value != null) {
+ this.showSearchButton = value;
+ } else {
+ this.showSearchButton = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_SEARCH_BUTTON,
+ value: this.showSearchButton,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_COPY_BUTTON).then(
+ async value => {
+ if (value != null) {
+ this.showCopyButton = value;
+ } else {
+ this.showCopyButton = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_COPY_BUTTON,
+ value: this.showCopyButton,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_BASE64_BUTTON).then(
+ async value => {
+ if (value != null) {
+ this.showBase64Button = value;
+ } else {
+ this.showBase64Button = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_BASE64_BUTTON,
+ value: this.showBase64Button,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_ENLARGE_BUTTON).then(
+ async value => {
+ if (value != null) {
+ this.showEnlargeButton = value;
+ } else {
+ this.showEnlargeButton = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_ENLARGE_BUTTON,
+ value: this.showEnlargeButton,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_BOOKMARK_BUTTON).then(
+ async value => {
+ if (value != null) {
+ this.showBookmarkButton = value;
+ } else {
+ this.showBookmarkButton = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_BOOKMARK_BUTTON,
+ value: this.showBookmarkButton,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_OPEN_URL_BUTTON).then(
+ async value => {
+ if (value != null) {
+ this.showOpenUrlButton = value;
+ } else {
+ this.showOpenUrlButton = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_OPEN_URL_BUTTON,
+ value: this.showOpenUrlButton,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_BROWSE_BUTTON).then(
+ async value => {
+ if (value != null) {
+ this.showBrowseButton = value;
+ } else {
+ this.showBrowseButton = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_BROWSE_BUTTON,
+ value: this.showBrowseButton,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_ADD_CONTACT_BUTTON).then(
+ async value => {
+ if (value != null) {
+ this.showAddContactButton = value;
+ } else {
+ this.showAddContactButton = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_ADD_CONTACT_BUTTON,
+ value: this.showAddContactButton,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_CALL_BUTTON).then(
+ async value => {
+ if (value != null) {
+ this.showCallButton = value;
+ } else {
+ this.showCallButton = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_CALL_BUTTON,
+ value: this.showCallButton,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_SEND_MESSAGE_BUTTON).then(
+ async value => {
+ if (value != null) {
+ this.showSendMessageButton = value;
+ } else {
+ this.showSendMessageButton = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_SEND_MESSAGE_BUTTON,
+ value: this.showSendMessageButton,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_SHOW_SEND_EMAIL_BUTTON).then(
+ async value => {
+ if (value != null) {
+ this.showSendEmailButton = value;
+ } else {
+ this.showSendEmailButton = 'on';
+ }
+ await Preferences.set({
+ key: this.KEY_SHOW_SEND_EMAIL_BUTTON,
+ value: this.showSendEmailButton,
+ });
+ }
+ );
+ await oldStorage.get(this.KEY_AUTO_EXIT_MIN).then(
+ async value => {
+ if (value != null) {
+ this.autoExitAppMin = value;
+ } else {
+ this.autoExitAppMin = -1;
+ }
+ await Preferences.set({
+ key: this.KEY_AUTO_EXIT_MIN,
+ value: JSON.stringify(this.autoExitAppMin),
+ });
+ }
+ );
+ }
+ await oldStorage.clear();
+ }
+
+ private async _loadStorage() {
+ if (this.platform.is('android')) await Preferences.remove({ key: this.KEY_ANDROID_PREV_NOT_SHOW_UPDATE_NOTES });
+ if (this.platform.is('ios')) await Preferences.remove({ key: this.KEY_IOS_PREV_NOT_SHOW_UPDATE_NOTES });
+ await Preferences.get({ key: this.KEY_START_PAGE }).then(
+ async result => {
+ if (result.value != null) {
+ this.startPage = result.value as TabPageType;
} else {
this.startPage = '/tabs/scan';
}
}
);
- this._storage.get("history-page-start-segment").then(
- value => {
- if (value != null) {
- this.historyPageStartSegment = value;
+ await Preferences.get({ key: this.KEY_HISTORY_PAGE_START_SEGMENT }).then(
+ async result => {
+ if (result.value != null) {
+ this.historyPageStartSegment = result.value as HistoryPageSegmentType;
} else {
this.historyPageStartSegment = 'history';
}
}
);
- this._storage.get("start-page-header").then(
- async value => {
- if (value !== null && value !== undefined) {
- this.startPageHeader = value;
+ await Preferences.get({ key: this.KEY_START_PAGE_HEADER }).then(
+ async result => {
+ if (result.value != null) {
+ this.startPageHeader = result.value as OnOffType;
} else {
this.startPageHeader = 'on';
}
}
);
- this._storage.get(environment.storageScanRecordKey).then(
- value => {
- if (value !== null && value !== undefined) {
+ await Preferences.get({ key: this.KEY_SCAN_RECORDS }).then(
+ async result => {
+ if (result.value != null) {
try {
- this._scanRecords = JSON.parse(value);
- this._scanRecords.forEach(
+ this.scanRecords = JSON.parse(result.value);
+ this.scanRecords.forEach(
r => {
const tCreatedAt = r.createdAt;
r.createdAt = new Date(tCreatedAt);
}
);
- this._scanRecords.sort((r1, r2) => {
+ this.scanRecords.sort((r1, r2) => {
return r2.createdAt.getTime() - r1.createdAt.getTime();
});
} catch (err) {
console.error(err);
- this._scanRecords = [];
+ this.scanRecords = [];
}
}
}
);
- this._storage.get(environment.storageBookmarkKey).then(
- value => {
- if (value !== null && value !== undefined) {
+ await Preferences.get({ key: this.KEY_BOOKMARKS }).then(
+ async result => {
+ if (result.value != null) {
try {
- this._bookmarks = JSON.parse(value);
- this._bookmarks.forEach(
+ this.bookmarks = JSON.parse(result.value);
+ this.bookmarks.forEach(
b => {
if (b.id == null) {
b.id = uuidv4();
@@ -183,386 +830,374 @@ export class EnvService {
b.createdAt = new Date(tCreatedAt);
}
);
- this._bookmarks.sort((a, b) => {
+ this.bookmarks.sort((a, b) => {
return ('' + a.tag ?? '').localeCompare(b.tag ?? '');
});
} catch (err) {
console.error(err);
- this._bookmarks = [];
+ this.bookmarks = [];
}
}
}
)
- this._storage.get("not-show-history-tutorial").then(
- value => {
- if (value !== null && value !== undefined) {
- this.notShowHistoryTutorial = (value === 'yes' ? true : false);
- } else {
- this.notShowHistoryTutorial = false;
- }
- }
- );
- this._storage.get("not-show-bookmark-tutorial").then(
- value => {
- if (value !== null && value !== undefined) {
- this.notShowBookmarkTutorial = (value === 'yes' ? true : false);
- } else {
- this.notShowBookmarkTutorial = false;
- }
- }
- );
- this._storage.get("language").then(
- async value => {
- if (value !== null && value !== undefined) {
- this.selectedLanguage = value;
+ await Preferences.get({ key: this.KEY_LANGUAGE }).then(
+ async result => {
+ if (result.value != null) {
+ this.selectedLanguage = result.value as 'default' | LanguageType;
} else {
this.selectedLanguage = 'default';
}
this.toggleLanguageChange();
}
);
- this._storage.get("color").then(
- async value => {
- if (value !== null && value !== undefined) {
- this.selectedColorTheme = value;
+ await Preferences.get({ key: this.KEY_COLOR }).then(
+ async result => {
+ if (result.value != null) {
+ this.selectedColorTheme = result.value as 'default' | ColorThemeType;
} else {
this.selectedColorTheme = 'default';
}
await this.toggleColorTheme();
}
);
- this._storage.get("debug-mode-on").then(
- value => {
- if (value != null) {
- this.debugMode = value;
+ 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) {
+ this.debugMode = result.value as OnOffType;
} else {
this.debugMode = 'off';
}
}
);
- this._storage.get("orientation").then(
- async value => {
- if (value !== null && value !== undefined) {
- this.orientation = value;
+ await Preferences.get({ key: this.KEY_ORIENTATION }).then(
+ async result => {
+ if (result.value != null) {
+ this.orientation = result.value as 'default' | OrientationType;
} else {
this.orientation = 'default';
}
await this.toggleOrientationChange();
}
);
- this._storage.get("scan-record-logging").then(
- value => {
- if (value !== null && value !== undefined) {
- this.scanRecordLogging = value;
+ await Preferences.get({ key: this.KEY_SCAN_RECORD_LOGGING }).then(
+ async result => {
+ if (result.value != null) {
+ this.scanRecordLogging = result.value as OnOffType;
} else {
this.scanRecordLogging = 'on';
}
}
);
- this._storage.get("recordsLimit").then(
- value => {
- if (value !== null && value !== undefined) {
- this.recordsLimit = value;
+ await Preferences.get({ key: this.KEY_RECORDS_LIMIT }).then(
+ async result => {
+ if (result.value != null) {
+ this.recordsLimit = JSON.parse(result.value);
} else {
this.recordsLimit = -1;
}
}
);
- this._storage.get("showNumberOfRecords").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showNumberOfRecords = value;
+ await Preferences.get({ key: this.KEY_SHOW_NUMBER_OF_RECORDS }).then(
+ async result => {
+ if (result.value != null) {
+ this.showNumberOfRecords = result.value as OnOffType;
} else {
this.showNumberOfRecords = 'on';
}
}
);
- this._storage.get("vibration").then(
- value => {
- if (value !== null && value !== undefined) {
- this.vibration = value;
+ await Preferences.get({ key: this.KEY_VIBRATION }).then(
+ async result => {
+ if (result.value != null) {
+ this.vibration = result.value as VibrationType;
} else {
this.vibration = 'on';
}
}
);
- this._storage.get("error-correction-level").then(
- value => {
- if (value !== null && value !== undefined) {
- this.errorCorrectionLevel = value;
+ await Preferences.get({ key: this.KEY_ERROR_CORRECTION_LEVEL }).then(
+ async result => {
+ if (result.value != null) {
+ this.errorCorrectionLevel = result.value as ErrorCorrectionLevelType;
} else {
this.errorCorrectionLevel = 'M';
}
}
);
- this._storage.get("qrCodeLightR").then(
- value => {
- if (value !== null && value !== undefined) {
- this.qrCodeLightR = value;
+ await Preferences.get({ key: this.KEY_QR_CODE_LIGHT_R }).then(
+ async result => {
+ if (result.value != null) {
+ this.qrCodeLightR = JSON.parse(result.value);
} else {
this.qrCodeLightR = 255;
}
}
);
- this._storage.get("qrCodeLightG").then(
- value => {
- if (value !== null && value !== undefined) {
- this.qrCodeLightG = value;
+ await Preferences.get({ key: this.KEY_QR_CODE_LIGHT_G }).then(
+ async result => {
+ if (result.value != null) {
+ this.qrCodeLightG = JSON.parse(result.value);
} else {
this.qrCodeLightG = 255;
}
}
);
- this._storage.get("qrCodeLightB").then(
- value => {
- if (value !== null && value !== undefined) {
- this.qrCodeLightB = value;
+ await Preferences.get({ key: this.KEY_QR_CODE_LIGHT_B }).then(
+ async result => {
+ if (result.value != null) {
+ this.qrCodeLightB = JSON.parse(result.value);
} else {
this.qrCodeLightB = 255;
}
}
);
- this._storage.get("qrCodeDarkR").then(
- value => {
- if (value !== null && value !== undefined) {
- this.qrCodeDarkR = value;
+ await Preferences.get({ key: this.KEY_QR_CODE_DARK_R }).then(
+ async result => {
+ if (result.value != null) {
+ this.qrCodeDarkR = JSON.parse(result.value);
} else {
this.qrCodeDarkR = 34;
}
}
);
- this._storage.get("qrCodeDarkG").then(
- value => {
- if (value !== null && value !== undefined) {
- this.qrCodeDarkG = value;
+ await Preferences.get({ key: this.KEY_QR_CODE_DARK_G }).then(
+ async result => {
+ if (result.value != null) {
+ this.qrCodeDarkG = JSON.parse(result.value);
} else {
this.qrCodeDarkG = 36;
}
}
);
- this._storage.get("qrCodeDarkB").then(
- value => {
- if (value !== null && value !== undefined) {
- this.qrCodeDarkB = value;
+ await Preferences.get({ key: this.KEY_QR_CODE_DARK_B }).then(
+ async result => {
+ if (result.value != null) {
+ this.qrCodeDarkB = JSON.parse(result.value);
} else {
this.qrCodeDarkB = 40;
}
}
);
- this._storage.get("qrCodeMargin").then(
- value => {
- if (value !== null && value !== undefined) {
- this.qrCodeMargin = value;
+ await Preferences.get({ key: this.KEY_QR_CODE_MARGIN }).then(
+ async result => {
+ if (result.value != null) {
+ this.qrCodeMargin = JSON.parse(result.value);
} else {
this.qrCodeMargin = 3;
}
}
);
- this._storage.get("auto-max-brightness").then(
- value => {
- if (value !== null && value !== undefined) {
- this.autoMaxBrightness = value;
+ await Preferences.get({ key: this.KEY_AUTO_MAX_BRIGHTNESS }).then(
+ async result => {
+ if (result.value != null) {
+ this.autoMaxBrightness = result.value as OnOffType;
} else {
- this.autoMaxBrightness = 'on';
+ this.autoMaxBrightness = 'off';
}
}
);
- this._storage.get("search-engine").then(
- value => {
- if (value !== null && value !== undefined) {
- this.searchEngine = value;
+ await Preferences.get({ key: this.KEY_AUTO_OPEN_URL }).then(
+ async result => {
+ if (result.value != null) {
+ this.autoOpenUrl = result.value as OnOffType;
+ } else {
+ this.autoOpenUrl = 'off';
+ }
+ }
+ );
+ await Preferences.get({ key: this.KEY_SEARCH_ENGINE }).then(
+ async result => {
+ if (result.value != null) {
+ this.searchEngine = result.value as SearchEngineType;
} else {
this.searchEngine = 'google';
}
}
);
- this._storage.get("result-page-buttons").then(
- value => {
- if (value !== null && value !== undefined) {
- this.resultPageButtons = value;
+ await Preferences.get({ key: this.KEY_RESULT_PAGE_BUTTONS }).then(
+ async result => {
+ if (result.value != null) {
+ this.resultPageButtons = result.value as ResultPageButtonsType;
} else {
this.resultPageButtons = 'detailed';
}
}
);
- this._storage.get("show-qr-after-camera-scan").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showQrAfterCameraScan = value;
+ await Preferences.get({ key: this.KEY_SHOW_QR_AFTER_CAMERA_SCAN }).then(
+ async result => {
+ if (result.value != null) {
+ this.showQrAfterCameraScan = result.value as OnOffType;
} else {
this.showQrAfterCameraScan = 'off';
}
}
);
- this._storage.get("show-qr-after-image-scan").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showQrAfterImageScan = value;
+ await Preferences.get({ key: this.KEY_SHOW_QR_AFTER_IMAGE_SCAN }).then(
+ async result => {
+ if (result.value != null) {
+ this.showQrAfterImageScan = result.value as OnOffType;
} else {
this.showQrAfterImageScan = 'off';
}
}
);
- this._storage.get("show-qr-after-create").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showQrAfterCreate = value;
+ await Preferences.get({ key: this.KEY_SHOW_QR_AFTER_CREATE }).then(
+ async result => {
+ if (result.value != null) {
+ this.showQrAfterCreate = result.value as OnOffType;
} else {
this.showQrAfterCreate = 'on';
}
}
);
- this._storage.get("show-qr-after-log-view").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showQrAfterLogView = value;
+ await Preferences.get({ key: this.KEY_SHOW_QR_AFTER_LOG_VIEW }).then(
+ async result => {
+ if (result.value != null) {
+ this.showQrAfterLogView = result.value as OnOffType;
} else {
this.showQrAfterLogView = 'on';
}
}
);
- this._storage.get("show-qr-after-bookmark-view").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showQrAfterBookmarkView = value;
+ await Preferences.get({ key: this.KEY_SHOW_QR_AFTER_BOOKMARK_VIEW }).then(
+ async result => {
+ if (result.value != null) {
+ this.showQrAfterBookmarkView = result.value as OnOffType;
} else {
this.showQrAfterBookmarkView = 'on';
}
}
);
- this._storage.get("showSearchButton").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showSearchButton = value;
+ await Preferences.get({ key: this.KEY_SHOW_SEARCH_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showSearchButton = result.value as OnOffType;
} else {
this.showSearchButton = 'on';
}
}
);
- this._storage.get("showCopyButton").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showCopyButton = value;
+ await Preferences.get({ key: this.KEY_SHOW_COPY_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showCopyButton = result.value as OnOffType;
} else {
this.showCopyButton = 'on';
}
}
);
- this._storage.get("showBase64Button").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showBase64Button = value;
+ await Preferences.get({ key: this.KEY_SHOW_BASE64_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showBase64Button = result.value as OnOffType;
} else {
this.showBase64Button = 'on';
}
}
);
- this._storage.get("showEnlargeButton").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showEnlargeButton = value;
+ await Preferences.get({ key: this.KEY_SHOW_ENLARGE_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showEnlargeButton = result.value as OnOffType;
} else {
this.showEnlargeButton = 'on';
}
}
);
- this._storage.get("showBookmarkButton").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showBookmarkButton = value;
+ await Preferences.get({ key: this.KEY_SHOW_BOOKMARK_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showBookmarkButton = result.value as OnOffType;
} else {
this.showBookmarkButton = 'on';
}
}
);
- this._storage.get("showOpenUrlButton").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showOpenUrlButton = value;
+ await Preferences.get({ key: this.KEY_SHOW_OPEN_URL_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showOpenUrlButton = result.value as OnOffType;
} else {
this.showOpenUrlButton = 'on';
}
}
);
- this._storage.get("showBrowseButton").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showBrowseButton = value;
+ await Preferences.get({ key: this.KEY_SHOW_BROWSE_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showBrowseButton = result.value as OnOffType;
} else {
this.showBrowseButton = 'on';
}
}
);
- this._storage.get("showAddContactButton").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showAddContactButton = value;
+ await Preferences.get({ key: this.KEY_SHOW_ADD_CONTACT_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showAddContactButton = result.value as OnOffType;
} else {
this.showAddContactButton = 'on';
}
}
);
- this._storage.get("showCallButton").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showCallButton = value;
+ await Preferences.get({ key: this.KEY_SHOW_CALL_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showCallButton = result.value as OnOffType;
} else {
this.showCallButton = 'on';
}
}
);
- this._storage.get("showSendMessageButton").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showSendMessageButton = value;
+ await Preferences.get({ key: this.KEY_SHOW_SEND_MESSAGE_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showSendMessageButton = result.value as OnOffType;
} else {
this.showSendMessageButton = 'on';
}
}
);
- this._storage.get("showSendEmailButton").then(
- value => {
- if (value !== null && value !== undefined) {
- this.showSendEmailButton = value;
+ await Preferences.get({ key: this.KEY_SHOW_SEND_EMAIL_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showSendEmailButton = result.value as OnOffType;
} else {
this.showSendEmailButton = 'on';
}
}
);
- this._storage.get("autoExitAppMin").then(
- value => {
- if (value != null) {
- this.autoExitAppMin = value;
+ await Preferences.get({ key: this.KEY_SHOW_OPEN_FOOD_FACTS_BUTTON }).then(
+ async result => {
+ if (result.value != null) {
+ this.showOpenFoodFactsButton = result.value as OnOffType;
+ } else {
+ this.showOpenFoodFactsButton = 'on';
+ }
+ }
+ );
+ await Preferences.get({ key: this.KEY_AUTO_EXIT_MIN }).then(
+ async result => {
+ if (result.value != null) {
+ this.autoExitAppMin = JSON.parse(result.value);
} else {
this.autoExitAppMin = -1;
}
}
);
- if (this.platform.is('android')) this._storage.remove(this.AN_PREV_PATCH_NOTE_STORAGE_KEY).catch(err => { });
- if (this.platform.is('ios')) this._storage.remove(this.IOS_PREV_PATCH_NOTE_STORAGE_KEY).catch(err => { });
- }
-
- public async storageSet(key: string, value: any) {
- await this._storage?.set(key, value);
- }
-
- public async storageGet(key: string): Promise {
- const value = await this._storage?.get(key).then(
- value => {
- return value;
- },
- err => {
- if (this.isDebugging) {
- this.presentToast("Error when get item from storage: " + JSON.stringify(err), "long", "top");
- }
- return null;
- }
- );
- return value;
}
public async resetAll() {
- await this._storage.clear();
+ await Preferences.clear();
this.startPage = '/tabs/scan';
this.historyPageStartSegment = 'history';
this.startPageHeader = 'on';
@@ -573,7 +1208,8 @@ export class EnvService {
this.scanRecordLogging = 'on';
this.recordsLimit = -1;
this.showNumberOfRecords = 'on';
- this.autoMaxBrightness = 'on';
+ this.autoMaxBrightness = 'off';
+ this.autoOpenUrl = 'off';
this.errorCorrectionLevel = 'M';
this.qrCodeLightR = 255;
this.qrCodeLightG = 255;
@@ -585,8 +1221,6 @@ export class EnvService {
this.vibration = 'on';
this.orientation = 'default';
await this.toggleOrientationChange();
- this.notShowHistoryTutorial = false;
- this.notShowBookmarkTutorial = false;
this.notShowUpdateNotes = false;
this.searchEngine = 'google';
this.resultPageButtons = 'detailed';
@@ -606,8 +1240,10 @@ export class EnvService {
this.showCallButton = 'on';
this.showSendMessageButton = 'on';
this.showSendEmailButton = 'on';
- this._scanRecords = [];
- this._bookmarks = [];
+ this.showOpenFoodFactsButton = 'on';
+ this.scanRecords = [];
+ this.bookmarks = [];
+ this.showExitAppAlert = 'on';
this.debugMode = 'off';
this.autoExitAppMin = -1;
}
@@ -619,187 +1255,165 @@ export class EnvService {
public async resetSetting() {
this.startPage = '/tabs/scan';
- await this.storageSet("start-page", this.startPage);
+ await Preferences.set({ key: this.KEY_START_PAGE, value: this.startPage });
this.historyPageStartSegment = 'history';
- await this.storageSet("history-page-start-segment", this.historyPageStartSegment);
+ await Preferences.set({ key: this.KEY_HISTORY_PAGE_START_SEGMENT, value: this.historyPageStartSegment });
this.startPageHeader = 'on';
- await this.storageSet("start-page-header", this.startPageHeader);
+ await Preferences.set({ key: this.KEY_START_PAGE_HEADER, value: this.startPageHeader });
this.selectedLanguage = 'default';
this.toggleLanguageChange();
- await this.storageSet("language", this.selectedLanguage);
+ await Preferences.set({ key: this.KEY_LANGUAGE, value: this.selectedLanguage });
this.selectedColorTheme = 'default';
await this.toggleColorTheme();
- await this.storageSet("color", this.selectedColorTheme);
+ await Preferences.set({ key: this.KEY_COLOR, value: this.selectedColorTheme });
this.scanRecordLogging = 'on';
- await this.storageSet("scan-record-logging", this.scanRecordLogging);
+ await Preferences.set({ key: this.KEY_SCAN_RECORD_LOGGING, value: this.scanRecordLogging });
this.recordsLimit = -1;
- await this.storageSet("recordsLimit", this.recordsLimit);
+ await Preferences.set({ key: this.KEY_RECORDS_LIMIT, value: JSON.stringify(this.recordsLimit) });
this.showNumberOfRecords = 'on';
- await this.storageSet("showNumberOfRecords", this.showNumberOfRecords);
+ await Preferences.set({ key: this.KEY_SHOW_NUMBER_OF_RECORDS, value: this.showNumberOfRecords });
- this.autoMaxBrightness = 'on';
- await this.storageSet("auto-max-brightness", this.autoMaxBrightness);
+ this.autoMaxBrightness = 'off';
+ await Preferences.set({ key: this.KEY_AUTO_MAX_BRIGHTNESS, value: this.autoMaxBrightness });
+
+ this.autoOpenUrl = 'off';
+ await Preferences.set({ key: this.KEY_AUTO_OPEN_URL, value: this.autoOpenUrl });
this.errorCorrectionLevel = 'M';
- await this.storageSet("error-correction-level", this.errorCorrectionLevel);
+ await Preferences.set({ key: this.KEY_ERROR_CORRECTION_LEVEL, value: this.errorCorrectionLevel });
this.qrCodeLightR = 255;
- await this.storageSet("qrCodeLightR", this.qrCodeLightR);
+ await Preferences.set({ key: this.KEY_QR_CODE_LIGHT_R, value: JSON.stringify(this.qrCodeLightR) });
this.qrCodeLightG = 255;
- await this.storageSet("qrCodeLightG", this.qrCodeLightG);
+ await Preferences.set({ key: this.KEY_QR_CODE_LIGHT_G, value: JSON.stringify(this.qrCodeLightG) });
this.qrCodeLightB = 255;
- await this.storageSet("qrCodeLightB", this.qrCodeLightB);
+ await Preferences.set({ key: this.KEY_QR_CODE_LIGHT_B, value: JSON.stringify(this.qrCodeLightB) });
this.qrCodeDarkR = 34;
- await this.storageSet("qrCodeDarkR", this.qrCodeDarkR);
+ await Preferences.set({ key: this.KEY_QR_CODE_DARK_R, value: JSON.stringify(this.qrCodeDarkR) });
this.qrCodeDarkG = 36;
- await this.storageSet("qrCodeDarkG", this.qrCodeDarkG);
+ await Preferences.set({ key: this.KEY_QR_CODE_DARK_G, value: JSON.stringify(this.qrCodeDarkG) });
this.qrCodeDarkB = 40;
- await this.storageSet("qrCodeDarkB", this.qrCodeDarkB);
+ await Preferences.set({ key: this.KEY_QR_CODE_DARK_B, value: JSON.stringify(this.qrCodeDarkB) });
this.qrCodeMargin = 3;
- await this.storageSet("qrCodeMargin", this.qrCodeMargin);
-
+ await Preferences.set({ key: this.KEY_QR_CODE_MARGIN, value: JSON.stringify(this.qrCodeMargin) });
this.vibration = 'on';
- await this.storageSet("vibration", this.vibration);
+ await Preferences.set({ key: this.KEY_VIBRATION, value: this.vibration });
this.orientation = 'default';
await this.toggleOrientationChange();
- await this.storageSet("orientation", this.orientation);
-
- this.notShowHistoryTutorial = false;
- await this.storageSet("not-show-history-tutorial", 'no');
-
- this.notShowBookmarkTutorial = false;
- await this.storageSet("not-show-bookmark-tutorial", 'no');
+ await Preferences.set({ key: this.KEY_ORIENTATION, value: this.orientation });
this.notShowUpdateNotes = false;
if (this.platform.is('ios')) {
- await this.storageSet(this.IOS_PATCH_NOTE_STORAGE_KEY, 'no');
+ await Preferences.set({ key: this.KEY_IOS_NOT_SHOW_UPDATE_NOTES, value: 'no' });
} else if (this.platform.is('android')) {
- await this.storageSet(this.AN_PATCH_NOTE_STORAGE_KEY, 'no');
+ await Preferences.set({ key: this.KEY_ANDROID_NOT_SHOW_UPDATE_NOTES, value: 'no' });
}
this.searchEngine = 'google';
- await this.storageSet("search-engine", this.searchEngine);
+ await Preferences.set({ key: this.KEY_SEARCH_ENGINE, value: this.searchEngine });
this.resultPageButtons = 'detailed';
- await this.storageSet("result-page-buttons", this.resultPageButtons);
+ await Preferences.set({ key: this.KEY_RESULT_PAGE_BUTTONS, value: this.resultPageButtons });
this.showQrAfterCameraScan = 'off';
- await this.storageSet("show-qr-after-camera-scan", this.showQrAfterCameraScan);
+ await Preferences.set({ key: this.KEY_SHOW_QR_AFTER_CAMERA_SCAN, value: this.showQrAfterCameraScan });
this.showQrAfterImageScan = 'off';
- await this.storageSet("show-qr-after-image-scan", this.showQrAfterImageScan);
+ await Preferences.set({ key: this.KEY_SHOW_QR_AFTER_IMAGE_SCAN, value: this.showQrAfterImageScan });
this.showQrAfterCreate = 'on';
- await this.storageSet("show-qr-after-create", this.showQrAfterCreate);
+ await Preferences.set({ key: this.KEY_SHOW_QR_AFTER_CREATE, value: this.showQrAfterCreate });
this.showQrAfterLogView = 'on';
- await this.storageSet("show-qr-after-log-view", this.showQrAfterLogView);
+ await Preferences.set({ key: this.KEY_SHOW_QR_AFTER_LOG_VIEW, value: this.showQrAfterLogView });
this.showQrAfterBookmarkView = 'on';
- await this.storageSet("show-qr-after-bookmark-view", this.showQrAfterBookmarkView);
+ await Preferences.set({ key: this.KEY_SHOW_QR_AFTER_BOOKMARK_VIEW, value: this.showQrAfterBookmarkView });
this.showSearchButton = 'on';
- await this.storageSet("showSearchButton", this.showSearchButton);
+ await Preferences.set({ key: this.KEY_SHOW_SEARCH_BUTTON, value: this.showSearchButton });
this.showCopyButton = 'on';
- await this.storageSet("showCopyButton", this.showCopyButton);
+ await Preferences.set({ key: this.KEY_SHOW_COPY_BUTTON, value: this.showCopyButton });
this.showBase64Button = 'on';
- await this.storageSet("showBase64Button", this.showBase64Button);
+ await Preferences.set({ key: this.KEY_SHOW_BASE64_BUTTON, value: this.showBase64Button });
this.showEnlargeButton = 'on';
- await this.storageSet("showEnlargeButton", this.showEnlargeButton);
+ await Preferences.set({ key: this.KEY_SHOW_ENLARGE_BUTTON, value: this.showEnlargeButton });
this.showBookmarkButton = 'on';
- await this.storageSet("showBookmarkButton", this.showBookmarkButton);
+ await Preferences.set({ key: this.KEY_SHOW_BOOKMARK_BUTTON, value: this.showBookmarkButton });
this.showOpenUrlButton = 'on';
- await this.storageSet("showOpenUrlButton", this.showOpenUrlButton);
+ await Preferences.set({ key: this.KEY_SHOW_OPEN_URL_BUTTON, value: this.showOpenUrlButton });
this.showBrowseButton = 'on';
- await this.storageSet("showBrowseButton", this.showBrowseButton);
+ await Preferences.set({ key: this.KEY_SHOW_BROWSE_BUTTON, value: this.showBrowseButton });
this.showAddContactButton = 'on';
- await this.storageSet("showAddContactButton", this.showAddContactButton);
+ await Preferences.set({ key: this.KEY_SHOW_ADD_CONTACT_BUTTON, value: this.showAddContactButton });
this.showCallButton = 'on';
- await this.storageSet("showCallButton", this.showCallButton);
+ await Preferences.set({ key: this.KEY_SHOW_CALL_BUTTON, value: this.showCallButton });
this.showSendMessageButton = 'on';
- await this.storageSet("showSendMessageButton", this.showSendMessageButton);
+ await Preferences.set({ key: this.KEY_SHOW_SEND_MESSAGE_BUTTON, value: this.showSendMessageButton });
this.showSendEmailButton = 'on';
- await this.storageSet("showSendEmailButton", this.showSendEmailButton);
+ await Preferences.set({ key: this.KEY_SHOW_SEND_EMAIL_BUTTON, value: this.showSendEmailButton });
+
+ 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 this.storageSet("debug-mode-on", this.debugMode);
+ await Preferences.set({ key: this.KEY_DEBUG_MODE, value: this.debugMode });
this.autoExitAppMin = -1;
- await this.storageSet("autoExitAppMin", this.autoExitAppMin);
+ await Preferences.set({ key: this.KEY_AUTO_EXIT_MIN, value: JSON.stringify(this.autoExitAppMin) });
}
async resetQrCodeSettings() {
this.errorCorrectionLevel = 'M';
- await this.storageSet("error-correction-level", this.errorCorrectionLevel);
+ await Preferences.set({ key: this.KEY_ERROR_CORRECTION_LEVEL, value: this.errorCorrectionLevel });
this.qrCodeLightR = 255;
- await this.storageSet("qrCodeLightR", this.qrCodeLightR);
+ await Preferences.set({ key: this.KEY_QR_CODE_LIGHT_R, value: JSON.stringify(this.qrCodeLightR) });
this.qrCodeLightG = 255;
- await this.storageSet("qrCodeLightG", this.qrCodeLightG);
+ await Preferences.set({ key: this.KEY_QR_CODE_LIGHT_G, value: JSON.stringify(this.qrCodeLightG) });
this.qrCodeLightB = 255;
- await this.storageSet("qrCodeLightB", this.qrCodeLightB);
+ await Preferences.set({ key: this.KEY_QR_CODE_LIGHT_B, value: JSON.stringify(this.qrCodeLightB) });
this.qrCodeDarkR = 34;
- await this.storageSet("qrCodeDarkR", this.qrCodeDarkR);
+ await Preferences.set({ key: this.KEY_QR_CODE_DARK_R, value: JSON.stringify(this.qrCodeDarkR) });
this.qrCodeDarkG = 36;
- await this.storageSet("qrCodeDarkG", this.qrCodeDarkG);
+ await Preferences.set({ key: this.KEY_QR_CODE_DARK_G, value: JSON.stringify(this.qrCodeDarkG) });
this.qrCodeDarkB = 40;
- await this.storageSet("qrCodeDarkB", this.qrCodeDarkB);
+ await Preferences.set({ key: this.KEY_QR_CODE_DARK_B, value: JSON.stringify(this.qrCodeDarkB) });
this.qrCodeMargin = 3;
- await this.storageSet("qrCodeMargin", this.qrCodeMargin);
- }
-
- get result(): string {
- return this._scannedData;
- }
-
- set result(value: string) {
- this._scannedData = value;
- }
-
- get resultFormat(): string {
- return this._scannedDataFormat;
- }
-
- set resultFormat(value: string) {
- this._scannedDataFormat = value;
- }
-
- get scanRecords(): ScanRecord[] {
- return this._scanRecords;
- }
-
- set scanRecords(value: ScanRecord[]) {
- this._scanRecords = value;
+ await Preferences.set({ key: this.KEY_QR_CODE_MARGIN, value: JSON.stringify(this.qrCodeMargin) });
}
async saveScanRecord(value: string): Promise {
@@ -811,43 +1425,62 @@ export class EnvService {
if (this.recordSource != null) {
record.source = this.recordSource;
if (this.recordSource == 'scan') {
- record.barcodeType = this._scannedDataFormat;
+ record.barcodeType = this.resultContentFormat;
}
+ } else {
+ record.source = "view";
}
- this._scanRecords.unshift(record);
+ if (this.scanRecords == null) {
+ this.scanRecords = [];
+ }
+ this.scanRecords.unshift(record);
if (this.recordsLimit != -1) {
- if (this._scanRecords.length > this.recordsLimit) {
- this._scanRecords = this._scanRecords.slice(0, this.recordsLimit);
+ if (this.scanRecords.length > this.recordsLimit) {
+ this.scanRecords = this.scanRecords.slice(0, this.recordsLimit);
+ }
+ }
+ try {
+ const stringified = JSON.stringify(this.scanRecords);
+ await Preferences.set({ key: this.KEY_SCAN_RECORDS, value: stringified });
+ } catch (e) {
+ if (this.isDebugging) {
+ this.presentToast("Err when stringify scanRecords: " + JSON.stringify(e), "long", "top");
}
}
- await this.storageSet(environment.storageScanRecordKey, JSON.stringify(this._scanRecords));
}
async saveRestoredScanRecords(records: ScanRecord[]): Promise {
records.forEach(
r => {
- this._scanRecords.unshift(r);
+ this.scanRecords.unshift(r);
}
);
- this._scanRecords.forEach(
+ this.scanRecords.forEach(
t => {
const tCreatedAt = t.createdAt;
t.createdAt = new Date(tCreatedAt);
}
);
- this._scanRecords.sort((r1, r2) => {
+ this.scanRecords.sort((r1, r2) => {
return r2.createdAt.getTime() - r1.createdAt.getTime();
});
- await this.storageSet(environment.storageScanRecordKey, JSON.stringify(this._scanRecords));
+ try {
+ const stringified = JSON.stringify(this.scanRecords);
+ await Preferences.set({ key: this.KEY_SCAN_RECORDS, value: stringified });
+ } catch (e) {
+ if (this.isDebugging) {
+ this.presentToast("Err when stringify scanRecords: " + JSON.stringify(e), "long", "top");
+ }
+ }
}
async saveRestoredBookmarks(bookmarks: Bookmark[]): Promise {
bookmarks.forEach(
b => {
- this._bookmarks.unshift(b);
+ this.bookmarks.unshift(b);
}
);
- this._bookmarks.forEach(
+ this.bookmarks.forEach(
b => {
if (b.id == null) {
b.id = uuidv4();
@@ -856,39 +1489,63 @@ export class EnvService {
b.createdAt = new Date(tCreatedAt);
}
);
- this._bookmarks.sort((a, b) => {
+ this.bookmarks.sort((a, b) => {
return ('' + a.tag ?? '').localeCompare(b.tag ?? '');
});
- await this.storageSet(environment.storageBookmarkKey, JSON.stringify(this._bookmarks));
+ try {
+ const stringified = JSON.stringify(this.bookmarks);
+ await Preferences.set({ key: this.KEY_BOOKMARKS, value: stringified });
+ } catch (e) {
+ if (this.isDebugging) {
+ this.presentToast("Err when stringify bookmarks: " + JSON.stringify(e), "long", "top");
+ }
+ }
}
async undoScanRecordDeletion(record: ScanRecord): Promise {
- this._scanRecords.push(record);
- this._scanRecords.sort((r1, r2) => {
+ this.scanRecords.push(record);
+ this.scanRecords.sort((r1, r2) => {
return r2.createdAt.getTime() - r1.createdAt.getTime();
});
- await this.storageSet(environment.storageScanRecordKey, JSON.stringify(this._scanRecords));
+ try {
+ const stringified = JSON.stringify(this.scanRecords);
+ await Preferences.set({ key: this.KEY_SCAN_RECORDS, value: stringified });
+ } catch (e) {
+ if (this.isDebugging) {
+ this.presentToast("Err when stringify scanRecords: " + JSON.stringify(e), "long", "top");
+ }
+ }
}
async deleteScanRecord(recordId: string): Promise {
- const index = this._scanRecords.findIndex(r => r.id === recordId);
+ const index = this.scanRecords.findIndex(r => r.id === recordId);
if (index !== -1) {
- this._scanRecords.splice(index, 1);
- await this.storageSet(environment.storageScanRecordKey, JSON.stringify(this._scanRecords));
+ this.scanRecords.splice(index, 1);
+ try {
+ const stringified = JSON.stringify(this.scanRecords);
+ await Preferences.set({ key: this.KEY_SCAN_RECORDS, value: stringified });
+ } catch (e) {
+ if (this.isDebugging) {
+ this.presentToast("Err when stringify scanRecords: " + JSON.stringify(e), "long", "top");
+ }
+ }
}
}
async deleteAllScanRecords(): Promise {
- this._scanRecords = [];
- await this.storageSet(environment.storageScanRecordKey, JSON.stringify(this._scanRecords));
- }
-
- get bookmarks(): Bookmark[] {
- return this._bookmarks;
+ this.scanRecords = [];
+ try {
+ const stringified = JSON.stringify(this.scanRecords);
+ await Preferences.set({ key: this.KEY_SCAN_RECORDS, value: stringified });
+ } catch (e) {
+ if (this.isDebugging) {
+ this.presentToast("Err when stringify scanRecords: " + JSON.stringify(e), "long", "top");
+ }
+ }
}
async saveBookmark(value: string, tag: string): Promise {
- const index = this._bookmarks.findIndex(x => x.text === value);
+ const index = this.bookmarks.findIndex(x => x.text === value);
if (index === -1) {
const bookmark = new Bookmark();
const date = new Date();
@@ -896,11 +1553,18 @@ export class EnvService {
bookmark.text = value;
bookmark.createdAt = date;
bookmark.tag = tag;
- this._bookmarks.unshift(bookmark);
- this._bookmarks.sort((a, b) => {
+ this.bookmarks.unshift(bookmark);
+ this.bookmarks.sort((a, b) => {
return ('' + a.tag ?? '').localeCompare(b.tag ?? '');
});
- await this.storageSet(environment.storageBookmarkKey, JSON.stringify(this._bookmarks));
+ try {
+ const stringified = JSON.stringify(this.bookmarks);
+ await Preferences.set({ key: this.KEY_BOOKMARKS, value: stringified });
+ } catch (e) {
+ if (this.isDebugging) {
+ this.presentToast("Err when stringify bookmarks: " + JSON.stringify(e), "long", "top");
+ }
+ }
return bookmark;
} else {
return null;
@@ -908,24 +1572,45 @@ export class EnvService {
}
async undoBookmarkDeletion(bookmark: Bookmark): Promise {
- this._bookmarks.push(bookmark);
- this._bookmarks.sort((a, b) => {
+ this.bookmarks.push(bookmark);
+ this.bookmarks.sort((a, b) => {
return ('' + a.tag ?? '').localeCompare(b.tag ?? '');
});
- await this.storageSet(environment.storageBookmarkKey, JSON.stringify(this._bookmarks));
+ try {
+ const stringified = JSON.stringify(this.bookmarks);
+ await Preferences.set({ key: this.KEY_BOOKMARKS, value: stringified });
+ } catch (e) {
+ if (this.isDebugging) {
+ this.presentToast("Err when stringify bookmarks: " + JSON.stringify(e), "long", "top");
+ }
+ }
}
async deleteBookmark(text: string): Promise {
- const index = this._bookmarks.findIndex(t => t.text === text);
+ const index = this.bookmarks.findIndex(t => t.text === text);
if (index !== -1) {
- this._bookmarks.splice(index, 1);
- await this.storageSet(environment.storageBookmarkKey, JSON.stringify(this._bookmarks));
+ this.bookmarks.splice(index, 1);
+ try {
+ const stringified = JSON.stringify(this.bookmarks);
+ await Preferences.set({ key: this.KEY_BOOKMARKS, value: stringified });
+ } catch (e) {
+ if (this.isDebugging) {
+ this.presentToast("Err when stringify bookmarks: " + JSON.stringify(e), "long", "top");
+ }
+ }
}
}
async deleteAllBookmarks(): Promise {
- this._bookmarks = [];
- await this.storageSet(environment.storageBookmarkKey, JSON.stringify(this._bookmarks));
+ this.bookmarks = [];
+ try {
+ const stringified = JSON.stringify(this.bookmarks);
+ await Preferences.set({ key: this.KEY_BOOKMARKS, value: stringified });
+ } catch (e) {
+ if (this.isDebugging) {
+ this.presentToast("Err when stringify bookmarks: " + JSON.stringify(e), "long", "top");
+ }
+ }
}
toggleLanguageChange() {
@@ -949,6 +1634,12 @@ export class EnvService {
case "it":
language = "it"
break;
+ case "pt":
+ language = "pt-BR";
+ break;
+ case "ru":
+ language = "ru"
+ break;
case "zh":
if (browserCultureLang == 'zh-CN' || browserCultureLang == 'zh-SG') {
language = 'zh-CN';
@@ -1044,7 +1735,6 @@ export class EnvService {
this.screenOrientation.unlock();
return;
case 'portrait':
- // this.screenOrientation.unlock();
await this.screenOrientation.lock(this.screenOrientation.ORIENTATIONS.PORTRAIT)
.catch(err => {
if (this.isDebugging) {
@@ -1053,7 +1743,6 @@ export class EnvService {
});
return;
case 'landscape':
- // this.screenOrientation.unlock();
await this.screenOrientation.lock(this.screenOrientation.ORIENTATIONS.LANDSCAPE)
.catch(err => {
if (this.isDebugging) {
@@ -1068,9 +1757,9 @@ export class EnvService {
getBugReportMailContent(): string {
const toEmail = "tomfong.dev@gmail.com";
- const now = moment();
- const datetimestr1 = now.format("YYYYMMDDHHmmss");
- const datetimestr2 = now.format("YYYY-MM-DD HH:mm:ss ZZ");
+ const now = new Date();
+ const datetimestr1 = format(now, "yyyyMMddHHmmss");
+ const datetimestr2 = format(now, "yyyy-MM-dd HH:mm:ss zzzz");
const model = `${this._deviceInfo?.manufacturer} ${this._deviceInfo?.model}`;
const os = this.platform.is("android") ? "Android" : (this.platform.is("ios") ? "iOS" : "Other");
const osVersion = this._deviceInfo?.osVersion;
diff --git a/src/app/utils/helpers.ts b/src/app/utils/helpers.ts
index dedd2e4..f3d5a54 100644
--- a/src/app/utils/helpers.ts
+++ b/src/app/utils/helpers.ts
@@ -1,3 +1,6 @@
+import { HttpClient } from "@angular/common/http";
+import { TranslateHttpLoader } from "@ngx-translate/http-loader";
+
function componentToHex(c: number) {
var hex = c.toString(16);
return hex.length == 1 ? "0" + hex : hex;
@@ -5,4 +8,8 @@ function componentToHex(c: number) {
export function rgbToHex(r: number, g: number, b: number) {
return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
-}
\ No newline at end of file
+}
+
+export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
+ return new TranslateHttpLoader(http, './assets/i18n/', '.json');
+}
diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json
index e256de2..21f954e 100644
--- a/src/assets/i18n/de.json
+++ b/src/assets/i18n/de.json
@@ -21,6 +21,7 @@
"AUTO_KILL_BACKGROUND": "Auto Kill Hintergrund",
"AUTO_LOGGING": "Automatische Protokollierung",
"AUTO_MAX_BRIGHTNESS": "Auto Maximale Helligkeit",
+ "AUTO_OPEN_URL": "URL automatisch öffnen",
"AUTO_QR_CODE_POPUP": "Automatisches QR Code Pop-up",
"BACKGROUND_COLOR": "Hintergrundfarbe",
"BACKING_UP": "Sichern",
@@ -34,6 +35,7 @@
"BOOKMARKED": "Lesezeichen",
"BOOKMARKED_TEXTS": "Texte mit Lesezeichen",
"BOOKMARKS": "Lesezeichen",
+ "BRAVE_SEARCH": "Brave Search",
"BROWSE": "Durchsuchen",
"BROWSER": "Browser",
"BROWSE_WEBSITE": "Website durchsuchen",
@@ -45,6 +47,7 @@
"CLOSE": "Schließen",
"COLOR": "Farbe",
"COLOR_THEME": "Farbthema",
+ "COMING_SOON": "Bald verfügbar",
"CONTACT_METHOD": "Kontakt Methode",
"CONTACT_NAME": "Kontakt Name",
"CONTENT": "Inhalt",
@@ -65,6 +68,7 @@
"DETAILED": "Detailliert",
"DONE": "Erledigt",
"DUCK_DUCK_GO": "DuckDuckGo",
+ "ECOSIA": "Ecosia",
"EDIT": "Bearbeiten",
"EMAIL_ADDRESS": "Email Adresse",
"EMAIL_BODY": "Email Stelle",
@@ -77,6 +81,9 @@
"ERROR_CORRECTION_LEVEL": "Fehlerkorrektur-Level",
"EXIT": "Beenden",
"EXIT_APP": "App beenden",
+ "EXPORT": "Exportieren",
+ "EXPORTING": "Exportieren",
+ "EXPORT_TO_CSV": "In CSV exportieren",
"FAX_NUMBER": "Fax Nummer",
"FEMALE": "Weiblich",
"FIRST_NAME": "Vorname",
@@ -85,6 +92,7 @@
"FULL_RESET": "Voller Reset",
"FUNCTIONS": "Funktionen",
"GENDER": "Geschlecht",
+ "GEOLOCATION": "Geolokalisierung",
"GOOGLE_SEARCH": "Google-Suche",
"HAPTIC_FEEDBACK_ONLY": "Nur haptisches Feedback",
"HIDDEN_NETWORK_?": "Verstecktes Netzwerk?",
@@ -92,11 +100,13 @@
"HOME_PHONE_NUMBER": "Telefonnummer zu Hause",
"ICON_ONLY": "Nur Icon",
"IMPORT": "Importieren",
+ "IMPORT_FROM_CSV": "Aus CSV importieren",
"IMPORT_IMAGE": "Bild importieren",
"INITIAL_SEGMENT": "Erstes Segment",
"JOB_TITLE": "Berufsbezeichnung",
"LANGUAGE": "Sprache",
"LAST_NAME": "Nachname",
+ "LATITUDE": "Breitengrad",
"LEVEL_H": "Level H",
"LEVEL_L": "Level L",
"LEVEL_M": "Level M",
@@ -107,12 +117,15 @@
"LOCK_PORTRAIT": "Porträt sperren",
"LOG": "Protokoll",
"LOG_BACKUP_AND_RESTORE": "Protokoll, Sicherung und Wiederherstellung",
+ "LONGITUDE": "Längengrad",
"MALE": "Männlich",
+ "MANAGE_RECORDS": "Aufzeichnungen verwalten",
"MARGIN": "Rand",
"MESSAGE": "Nachricht",
"MESSAGE_CONTENT": "Inhalt der Nachricht",
"MICROSOFT_BING": "Microsoft Bing",
"MOBILE_PHONE_NUMBER": "Mobiltelefon Nummer",
+ "MORE": "Mehr",
"NAME": "Name",
"NO": "Nein",
"NONE": "Keine",
@@ -127,6 +140,7 @@
"OPEN": "Öffnen",
"OPEN_URL": "Öffne URL",
"OPEN_WITH_...": "Öffnen mit...",
+ "OPTIMIZING_DATA_...": "Optimierung der Daten...",
"ORGANIZATION": "Organization",
"ORIGINAL": "Original",
"OTHERS": "Andere",
@@ -156,6 +170,8 @@
"RESET_DEFAULT": "Standard zurücksetzen",
"RESTORE": "Wiederherstellen",
"RESULT": "Ergebnis",
+ "SAVE": "Speichern",
+ "SAVED": "Gespeichert",
"SCAN": "Scannen",
"SCANNED": "Gescannt",
"SCANNING_FEEDBACK_ONLY": "Nur Feedback scannen",
@@ -200,6 +216,7 @@
"VIEW_GITHUB": "GitHub anzeigen",
"VIEW_LOG": "Protokoll anzeigen",
"VIEW_STORE_AND_SOURCE_CODE": "Store und Quellcode anzeigen",
+ "VIEW_INSTRUCTIONS": "Anweisungen anzeigen",
"WEBSITE": "Website",
"WIFI": "WiFi",
"WIFI_ENCRYPTION": "WiFi Verschlüsselung",
@@ -214,6 +231,7 @@
"AUTO_KILL_BACKGROUND_EXPLAIN": "Um Systemressourcen und Akku zu sparen, lege die Zeit fest, zu der die Anwendung automatisch beendet wird, wenn sie im Hintergrund läuft.
Wenn Du gewählt hast Systemeinstellung folgens, die Anwendung wird vollständig vom System kontrolliert und kann nicht von selbst beendet werden.
Bitte beachte, dass in manchen Situationen, könnte das System die Anwendung im Voraus stoppen.
",
"AUTO_LOGGING_EXPLAIN": "Jeder QR-Code und Barcode-Inhalt wird protokolliert und automatisch gespeichert, nachdem Du ihn gescannt, erstellt oder erneut angezeigt hast. Du kannst sie auf der Seite Log einsehen.",
"AUTO_MAX_BRIGHTNESS_EXPLAIN": "Die Bildschirmhelligkeit wird automatisch auf das Maximum eingestellt, wenn ein QR-Code angezeigt wird..",
+ "AUTO_OPEN_URL_EXPLAIN": "Wenn der QR-Code gescannt wird und der Inhalt eine URL ist, wird die URL automatisch geöffnet.",
"AUTO_SHOW_QR_EXPLAIN": "Nach den folgenden Aktionen wird automatisch ein QR-Code auf der Ergebnisseite angezeigt.",
"BACKUP_EXPLAIN": "Du kannst alle Datensätze und Lesezeichen lokal sichern. Nach der Sicherung erhältst du eine Reihe von Geheimnissen. Bewahre das Geheimnis sicher auf, sonst kannst du die Sicherung nicht wiederherstellen. Bitte beachte, dass Simple QR keine plattformübergreifende Sicherung und Wiederherstellung unterstützt.",
"BACKUP_FAILED": "Sicherung fehlgeschlagen",
@@ -221,7 +239,6 @@
"BACKUP_SUCCESSFULLY": "Die Sicherung wurde erfolgreich durchgeführt. Bitte speichere die Sicherungsdatei und bewahre das folgende Geheimnis sicher auf
{secret}
",
"BARCODE_TYPE": "Scanne- QR Code
- 1D Barcode
- Aztec Code
- Data Matrix
- PDF417
Bild importierenErstelle",
"BOOKMARKED": "Erfolgreich mit Lesezeichen versehen",
- "BOOKMARK_TUTORIAL_SWIPE_RIGHT": "Wische nach rechts, um das Tag des entsprechenden Lesezeichens zu bearbeiten.",
"BUTTON_DISPLAY_EXPLAIN": "Ein- und Ausblenden der Aufgabenschaltflächen.",
"BUTTON_STYLE_EXPLAIN": "Wähle den Stil der Aufgabenschaltflächen.",
"CAMERA_PERMISSION": "Um das Scannen zu aktivieren, muss man der Kamera die Erlaubnis erteilen.",
@@ -236,10 +253,14 @@
"EMAIL_SUBJECT_MAX_LENGTH": "Max. 78 Zeichen",
"ERROR_CORRECTION_LEVEL_EXPLAIN": "Der QR-Code verfügt über eine Fehlerkorrekturfunktion, die es ermöglicht, Daten wiederherzustellen, selbst wenn der Code beschädigt ist.
Es stehen 4 Stufen zur Verfügung:
Level L stellt 7 % der Datenbytes wieder her.
Level M stellt 15 % der Datenbytes wieder her.
Level Q stellt 25 % der Datenbytes wieder her.
Level H stellt 30 % der Datenbytes wieder her.
Bitte beachte, dass eine Erhöhung der Level die Fehlerkorrekturfähigkeit verbessern kann, aber auch die Größe des QR-Codes erhöht. Daher wird für allgemeine Fälle die Level M empfohlen.
",
"EXIT_APP": "Bist du sicher, dass du die App beenden willst?
Wenn dir Simple QR gefällt, bewerte es bitte im Store.
",
+ "EXPORT_TO_CSV_EXPLAIN": "Sie können alle Datensätze und Lesezeichen in eine CSV-Datei exportieren.",
"FAILED_SAVING_CONTACT": "Kontakt konnte nicht gespeichert werden",
"FAIL_PREPARE_SMS": "Nachricht konnte nicht gesendet werden",
+ "IMPORT_FAILED": "Importieren fehlgeschlagen",
+ "IMPORT_FROM_CSV_EXPLAIN": "Sie können Datensätze und Lesezeichen aus einer CSV-Datei mit dem von Simple QR definierten Format importieren. Wenn Sie Daten zwischen Android und iOS übertragen möchten, verwenden Sie bitte diese Funktion.",
"INPUT_TAG": "Bitte gib dem Lesezeichen einen Tag",
"INVALID_BK_FILE": "Dies ist keine gültige Sicherungsdatei.",
+ "INVALID_CSV_FILE": "Dies ist keine gültige CSV-Datei.",
"NOT_BASE64_DE": "Daten können nicht Base64-dekodiert werden",
"NOT_BASE64_EN": "Daten können nicht Base64-kodiert werden",
"NOT_BASE64_EN_DE": "Daten können nicht mit Base64 kodiert und dekodiert werden",
@@ -279,7 +300,7 @@
"TAG_MAX_LENGTH_EXPLAIN": "Die Länge des Tags darf 30 Zeichen nicht überschreiten.",
"TUTORIAL_NOT_SHOW_AGAIN": "Nicht wieder zeigen",
"TUTORIAL_SWIPE_LEFT": "Wische nach links, um den entsprechenden Datensatz zu löschen.",
- "TUTORIAL_SWIPE_RIGHT": "Wische nach rechts, um den Text des entsprechenden Datensatzes mit einem Lesezeichen zu versehen.",
+ "TUTORIAL_SWIPE_RIGHT": "Wische nach rechts, um den Text des entsprechenden Datensatzes mit einem Lesezeichen zu versehen / Bearbeiten Sie das Label des entsprechenden Lesezeichens.",
"UNDO_DELETE": "Du kannst die Löschung rückgängig machen",
"VIBRATION_EXPLAIN": "Vibration oder haptisches Feedback geben. Bitte beachte, dass nicht alle Geräte diese Funktion unterstützen."
},
@@ -295,7 +316,7 @@
"UPC": "Universeller Produktcode "
},
"UPDATE": {
- "UPDATE_NOTES_ANDROID": "Diese Version bringt Ihnen mehrere Updates und neue Funktionen. Bitte überprüfen Sie GitHub für Details.
Android-Benutzer können jetzt die Kachel Simple QR im Bereich Schnelleinstellungen für einen schnellen Zugriff aktivieren.
",
- "UPDATE_NOTES_IOS": "Diese Version bringt Ihnen mehrere Updates und neue Funktionen. Bitte überprüfen Sie GitHub für Details."
+ "UPDATE_NOTES_ANDROID": "Diese Version bringt Ihnen mehrere Updates und neue Funktionen. Bitte überprüfen Sie GitHub für Details.
",
+ "UPDATE_NOTES_IOS": "Diese Version bringt Ihnen mehrere Updates und neue Funktionen. Bitte überprüfen Sie GitHub für Details.
"
}
}
\ No newline at end of file
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 13e479a..5bb0dd3 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -21,6 +21,7 @@
"AUTO_KILL_BACKGROUND": "Auto Kill Background",
"AUTO_LOGGING": "Auto Logging",
"AUTO_MAX_BRIGHTNESS": "Auto Max Brightness",
+ "AUTO_OPEN_URL": "Auto Open URL",
"AUTO_QR_CODE_POPUP": "Auto QR Code Pop-up",
"BACKGROUND_COLOR": "Background Color",
"BACKING_UP": "Backing Up",
@@ -34,6 +35,7 @@
"BOOKMARKED": "Bookmarked",
"BOOKMARKED_TEXTS": "Bookmarked texts",
"BOOKMARKS": "Bookmarks",
+ "BRAVE_SEARCH": "Brave Search",
"BROWSE": "Browse",
"BROWSER": "Browser",
"BROWSE_WEBSITE": "Browse Website",
@@ -45,6 +47,7 @@
"CLOSE": "Close",
"COLOR": "Color",
"COLOR_THEME": "Color Theme",
+ "COMING_SOON": "Coming soon",
"CONTACT_METHOD": "Contact Method",
"CONTACT_NAME": "Contact Name",
"CONTENT": "Content",
@@ -65,6 +68,7 @@
"DETAILED": "Detailed",
"DONE": "Done",
"DUCK_DUCK_GO": "DuckDuckGo",
+ "ECOSIA": "Ecosia",
"EDIT": "Edit",
"EMAIL_ADDRESS": "Email Address",
"EMAIL_BODY": "Email Body",
@@ -77,6 +81,9 @@
"ERROR_CORRECTION_LEVEL": "Error Correction Level",
"EXIT": "Exit",
"EXIT_APP": "Exit App",
+ "EXPORT": "Export",
+ "EXPORTING": "Exporting",
+ "EXPORT_TO_CSV": "Export to CSV",
"FAX_NUMBER": "Fax Number",
"FEMALE": "Female",
"FIRST_NAME": "First Name",
@@ -85,6 +92,7 @@
"FULL_RESET": "Full Reset",
"FUNCTIONS": "Functions",
"GENDER": "Gender",
+ "GEOLOCATION": "Geolocation",
"GOOGLE_SEARCH": "Google Search",
"HAPTIC_FEEDBACK_ONLY": "Haptic Feedback Only",
"HIDDEN_NETWORK_?": "Hidden Network?",
@@ -92,11 +100,13 @@
"HOME_PHONE_NUMBER": "Home Phone Number",
"ICON_ONLY": "Icon Only",
"IMPORT": "Import",
+ "IMPORT_FROM_CSV": "Import from CSV",
"IMPORT_IMAGE": "Import Image",
"INITIAL_SEGMENT": "Initial Segment",
"JOB_TITLE": "Job Title",
"LANGUAGE": "Language",
"LAST_NAME": "Last Name",
+ "LATITUDE": "Latitude",
"LEVEL_H": "Level H",
"LEVEL_L": "Level L",
"LEVEL_M": "Level M",
@@ -107,12 +117,15 @@
"LOCK_PORTRAIT": "Lock Portrait",
"LOG": "Log",
"LOG_BACKUP_AND_RESTORE": "Log, Backup & Restore",
+ "LONGITUDE": "Longitude",
"MALE": "Male",
+ "MANAGE_RECORDS": "Manage Records",
"MARGIN": "Margin",
"MESSAGE": "Message",
"MESSAGE_CONTENT": "Message Content",
"MICROSOFT_BING": "Microsoft Bing",
"MOBILE_PHONE_NUMBER": "Mobile Phone Number",
+ "MORE": "More",
"NAME": "Name",
"NO": "No",
"NONE": "None",
@@ -127,6 +140,7 @@
"OPEN": "Open",
"OPEN_URL": "Open URL",
"OPEN_WITH_...": "Open with...",
+ "OPTIMIZING_DATA_...": "Optimizing data...",
"ORGANIZATION": "Organization",
"ORIGINAL": "Original",
"OTHERS": "Others",
@@ -156,6 +170,8 @@
"RESET_DEFAULT": "Reset Default",
"RESTORE": "Restore",
"RESULT": "Result",
+ "SAVE": "Save",
+ "SAVED": "Saved",
"SCAN": "Scan",
"SCANNED": "Scanned",
"SCANNING_FEEDBACK_ONLY": "Scanning Feedback Only",
@@ -200,6 +216,7 @@
"VIEW_GITHUB": "View GitHub",
"VIEW_LOG": "View Log",
"VIEW_STORE_AND_SOURCE_CODE": "View Store & Source Code",
+ "VIEW_INSTRUCTIONS": "View Instructions",
"WEBSITE": "Website",
"WIFI": "WiFi",
"WIFI_ENCRYPTION": "WiFi Encryption",
@@ -214,6 +231,7 @@
"AUTO_KILL_BACKGROUND_EXPLAIN": "To save system resources and battery, set the time to automatically kill the app when it is running in the background.
If you choose Follow System Settings, the app will be fully controlled by system and won't be killed by itself.
Please note that in some situations, the system might stop the app in advance.
",
"AUTO_LOGGING_EXPLAIN": "Every QR code and barcode content are logged and stored automatically after you scan, create or view it again. You can view them on the Log page.",
"AUTO_MAX_BRIGHTNESS_EXPLAIN": "The screen brightness is automatically adjusted to the maximum when displaying QR code.",
+ "AUTO_OPEN_URL_EXPLAIN": "When the QR code is scanned and the content is a URL, the URL will be opened automatically.",
"AUTO_SHOW_QR_EXPLAIN": "Automatically pop up QR code on the Result page after the following actions.",
"BACKUP_EXPLAIN": "You can back up all records and bookmarks locally. You will be given a set of secret after backing up. Keep the secret securely, otherwise you cannot restore the backup. Please note that Simple QR does not support cross-platform backup and restore.",
"BACKUP_FAILED": "Failed to back up",
@@ -221,7 +239,6 @@
"BACKUP_SUCCESSFULLY": "Successfully backed up. Please save the backup file and keep the following secret securely
{secret}
",
"BARCODE_TYPE": "Scan- QR Code
- 1D Barcode
- Aztec Code
- Data Matrix
- PDF417
Import ImageCreate",
"BOOKMARKED": "Bookmarked Successfully",
- "BOOKMARK_TUTORIAL_SWIPE_RIGHT": "Swipe right to edit the tag of corresponding bookmark.",
"BUTTON_DISPLAY_EXPLAIN": "Show or hide the task buttons.",
"BUTTON_STYLE_EXPLAIN": "Choose the style of the task buttons.",
"CAMERA_PERMISSION": "To enable scanning, you must grant Camera permission.",
@@ -236,10 +253,14 @@
"EMAIL_SUBJECT_MAX_LENGTH": "Max. 78 characters",
"ERROR_CORRECTION_LEVEL_EXPLAIN": "QR code has error correction capability to restore data even if the code is damaged.
There are 4 levels available:
Level L restores 7% of data bytes.
Level M restores 15% of data bytes.
Level Q restores 25% of data bytes.
Level H restores 30% of data bytes.
Please be reminded that raising the level can improve error correction capability but also increases the QR code size. Therefore, for general cases, level M is recommended.
",
"EXIT_APP": "Are you sure to exit the app?
If you like Simple QR, please rate it on the store.
",
+ "EXPORT_TO_CSV_EXPLAIN": "You can export all records and bookmarks to a CSV file.",
"FAILED_SAVING_CONTACT": "Failed to save contact",
"FAIL_PREPARE_SMS": "Failed to send message",
+ "IMPORT_FAILED": "Failed to import",
+ "IMPORT_FROM_CSV_EXPLAIN": "You can import records and bookmarks from a CSV file with the format defined by Simple QR. If you want to transfer data between Android and iOS, please use this function.",
"INPUT_TAG": "Please give a tag to the bookmark",
"INVALID_BK_FILE": "This is not a valid backup file.",
+ "INVALID_CSV_FILE": "This is not a valid CSV file.",
"NOT_BASE64_DE": "Data cannot be Base64 decoded",
"NOT_BASE64_EN": "Data cannot be Base64 encoded",
"NOT_BASE64_EN_DE": "Data cannot be Base64 encoded and decoded",
@@ -279,7 +300,7 @@
"TAG_MAX_LENGTH_EXPLAIN": "The length of the tag must not exceed 30 characters.",
"TUTORIAL_NOT_SHOW_AGAIN": "Do not show again",
"TUTORIAL_SWIPE_LEFT": "Swipe left to delete corresponding record.",
- "TUTORIAL_SWIPE_RIGHT": "Swipe right to bookmark the text of corresponding record.",
+ "TUTORIAL_SWIPE_RIGHT": "Swipe right to bookmark the text of corresponding record / edit the tag of corresponding bookmark.",
"UNDO_DELETE": "You can undo the deletion",
"VIBRATION_EXPLAIN": "Provide vibration or haptic feedback. Please note that not all devices support this feature."
},
@@ -295,7 +316,7 @@
"UPC": "Universal Product Code "
},
"UPDATE": {
- "UPDATE_NOTES_ANDROID": "This release brings you several updates and new features. Please check GitHub for details.
Android users can now enable the Simple QR tile in the Quick Settings panel for quick access.
",
- "UPDATE_NOTES_IOS": "This release brings you several updates and new features. Please check GitHub for details."
+ "UPDATE_NOTES_ANDROID": "This release brings you several updates and new features. Please check GitHub for details.
",
+ "UPDATE_NOTES_IOS": "This release brings you several updates and new features. Please check GitHub for details.
"
}
}
\ No newline at end of file
diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json
index 1492a2a..8bf4172 100644
--- a/src/assets/i18n/fr.json
+++ b/src/assets/i18n/fr.json
@@ -21,6 +21,7 @@
"AUTO_KILL_BACKGROUND": "Arrière-plan de mise à mort automatique",
"AUTO_LOGGING": "Journalisation automatique",
"AUTO_MAX_BRIGHTNESS": "Luminosité max automatique",
+ "AUTO_OPEN_URL": "Ouvrir l'URL automatique",
"AUTO_QR_CODE_POPUP": "Fenêtre pop-up de code QR automatique",
"BACKGROUND_COLOR": "Couleur de l'arrière plan",
"BACKING_UP": "Sauvegarde",
@@ -34,6 +35,7 @@
"BOOKMARKED": "Mis en signet",
"BOOKMARKED_TEXTS": "Textes marqués d'un signet",
"BOOKMARKS": "Signets",
+ "BRAVE_SEARCH": "Brave Search",
"BROWSE": "Parcourir",
"BROWSER": "Navigateur",
"BROWSE_WEBSITE": "Parcourir le site Web",
@@ -45,6 +47,7 @@
"CLOSE": "Fermer",
"COLOR": "Couleur",
"COLOR_THEME": "Thème de couleur",
+ "COMING_SOON": "Bientôt disponible",
"CONTACT_METHOD": "Méthode de contact",
"CONTACT_NAME": "Nom du contact",
"CONTENT": "Le contenu",
@@ -65,6 +68,7 @@
"DETAILED": "Détaillé",
"DONE": "Fini",
"DUCK_DUCK_GO": "DuckDuckGo",
+ "ECOSIA": "Ecosia",
"EDIT": "Modifier",
"EMAIL_ADDRESS": "Adresse e-mail",
"EMAIL_BODY": "Corps de l'e-mail",
@@ -77,6 +81,9 @@
"ERROR_CORRECTION_LEVEL": "Niveau de correction d'erreur",
"EXIT": "Quitter",
"EXIT_APP": "Quitter l'application",
+ "EXPORT": "Exporter",
+ "EXPORTING": "Exportation",
+ "EXPORT_TO_CSV": "Exporter vers CSV",
"FAX_NUMBER": "Numéro de fax",
"FEMALE": "Femelle",
"FIRST_NAME": "Prénom",
@@ -85,6 +92,7 @@
"FULL_RESET": "Réinitialiser complètement",
"FUNCTIONS": "Fonctions",
"GENDER": "Sexe",
+ "GEOLOCATION": "Géolocalisation",
"GOOGLE_SEARCH": "Recherche Google",
"HAPTIC_FEEDBACK_ONLY": "Retour haptique uniquement",
"HIDDEN_NETWORK_?": "Réseau caché ?",
@@ -92,11 +100,13 @@
"HOME_PHONE_NUMBER": "Numéro de téléphone résidentiel",
"ICON_ONLY": "Icône uniquement",
"IMPORT": "Importer",
+ "IMPORT_FROM_CSV": "Importer depuis CSV",
"IMPORT_IMAGE": "Importer une image",
"INITIAL_SEGMENT": "Segment initial",
"JOB_TITLE": "Titre d'emploi",
"LANGUAGE": "Langue",
"LAST_NAME": "Nom de famille",
+ "LATITUDE": "Latitude",
"LEVEL_H": "Niveau H",
"LEVEL_L": "Niveau L",
"LEVEL_M": "Niveau M",
@@ -107,12 +117,15 @@
"LOCK_PORTRAIT": "Verrouiller le portrait",
"LOG": "Registre",
"LOG_BACKUP_AND_RESTORE": "Journalisation, sauvegarde et restauration",
+ "LONGITUDE": "Longitude",
"MALE": "Mâle",
+ "MANAGE_RECORDS": "Gérer les enregistrements",
"MARGIN": "Marge",
"MESSAGE": "Message",
"MESSAGE_CONTENT": "Contenu du message",
"MICROSOFT_BING": "Microsoft Bing",
"MOBILE_PHONE_NUMBER": "Numéro de portable",
+ "MORE": "Plus",
"NAME": "Nom",
"NO": "Non",
"NONE": "Aucun",
@@ -127,6 +140,7 @@
"OPEN": "Ouvrir",
"OPEN_URL": "Ouvrir l'URL",
"OPEN_WITH_...": "Ouvrir avec...",
+ "OPTIMIZING_DATA_...": "Optimiser les données...",
"ORGANIZATION": "Organisme",
"ORIGINAL": "Original",
"OTHERS": "Autres",
@@ -156,6 +170,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",
@@ -200,6 +216,7 @@
"VIEW_GITHUB": "Afficher le GitHub",
"VIEW_LOG": "Afficher le journal",
"VIEW_STORE_AND_SOURCE_CODE": "Afficher le magasin et le code source",
+ "VIEW_INSTRUCTIONS": "Afficher les instructions",
"WEBSITE": "Site Web",
"WIFI": "Wi-Fi",
"WIFI_ENCRYPTION": "Cryptage Wi-Fi",
@@ -214,6 +231,7 @@
"AUTO_KILL_BACKGROUND_EXPLAIN": "Pour économiser les ressources système et la batterie, définissez l'heure pour arrêter automatiquement l'application lorsqu'elle s'exécute en arrière-plan.
Si vous choisissez Suivre les paramètres du système, l'application sera entièrement contrôlée par le système et ne sera pas tuée d'elle-même.
Veuillez noter que dans certaines situations, le système peut arrêter l'application à l'avance.
",
"AUTO_LOGGING_EXPLAIN": "Chaque contenu de code QR et de code-barres est enregistré et stocké automatiquement après que vous l'avez numérisé, créé ou visualisé à nouveau. Vous pouvez les afficher sur la page Registre.",
"AUTO_MAX_BRIGHTNESS_EXPLAIN": "La luminosité de l'écran est automatiquement ajustée au maximum lors de l'affichage du code QR.",
+ "AUTO_OPEN_URL_EXPLAIN": "Lorsque le code QR est scanné et que le contenu est une URL, l'URL s'ouvre automatiquement.",
"AUTO_SHOW_QR_EXPLAIN": "Afficher automatiquement le code QR sur la page de résultat après les actions suivantes.",
"BACKUP_EXPLAIN": "Vous pouvez sauvegarder tous les enregistrements et signets localement. Vous recevrez un ensemble de code secret après la sauvegarde. Conservez le secret en toute sécurité, sinon vous ne pourrez pas restaurer la sauvegarde. Veuillez noter que Simple QR ne prend pas en charge la sauvegarde et la restauration multiplateforme.",
"BACKUP_FAILED": "Échec de la sauvegarde",
@@ -221,7 +239,6 @@
"BACKUP_SUCCESSFULLY": "Sauvegarde réussie. Veuillez enregistrer le fichier de sauvegarde et conserver le secret suivant en toute sécurité
{secret}
",
"BARCODE_TYPE": "Scanner- Code QR
- Code-barres 1D
- Code aztèque
- Data Matrix
- PDF417
Importer une imageCréer",
"BOOKMARKED": "Mis en signet avec succès",
- "BOOKMARK_TUTORIAL_SWIPE_RIGHT": "Balayez vers la droite pour modifier la balise du signet correspondant.",
"BUTTON_DISPLAY_EXPLAIN": "Afficher ou masquer les boutons de tâche.",
"BUTTON_STYLE_EXPLAIN": "Choisissez le style des boutons de tâche.",
"CAMERA_PERMISSION": "Pour activer la numérisation, vous devez accorder l'autorisation Caméra.",
@@ -236,10 +253,14 @@
"EMAIL_SUBJECT_MAX_LENGTH": "Max. 78 caractères",
"ERROR_CORRECTION_LEVEL_EXPLAIN": "Le code QR a une capacité de correction d'erreur pour restaurer les données même si le code est endommagé.
Il existe 4 niveaux disponibles :
Le niveau L restaure 7 % des octets de données.
Le niveau M restaure 15 % des octets de données.
Le niveau Q restaure 25 % des octets de données.
Le niveau H restaure 30 % des octets de données.
N'oubliez pas que l'augmentation du niveau peut améliorer la capacité de correction des erreurs, mais augmente également la taille du code QR. Par conséquent, pour les cas généraux, le niveau M est recommandé.
",
"EXIT_APP": "Voulez-vous vraiment quitter l'application ?
Si vous aimez Simple QR, veuillez l'évaluer sur la magasin.
",
+ "EXPORT_TO_CSV_EXPLAIN": "Vous pouvez exporter tous les enregistrements et signets dans un fichier CSV.",
"FAILED_SAVING_CONTACT": "Échec de l'enregistrement des contacts",
"FAIL_PREPARE_SMS": "Échec de l'envoi du message",
+ "IMPORT_FAILED": "Échec de l'importation",
+ "IMPORT_FROM_CSV_EXPLAIN": "Vous pouvez importer des enregistrements et des signets à partir d'un fichier CSV au format défini par Simple QR. Si vous souhaitez transférer des données entre Android et iOS, veuillez utiliser cette fonction.",
"INPUT_TAG": "Veuillez donner une étiquette au signet",
"INVALID_BK_FILE": "Ce fichier de sauvegarde n'est pas valide.",
+ "INVALID_CSV_FILE": "Ce fichier CSV n'est pas valide.",
"NOT_BASE64_DE": "Les données ne peuvent pas être décodées en Base64",
"NOT_BASE64_EN": "Les données ne peuvent pas être encodées en Base64",
"NOT_BASE64_EN_DE": "Les données ne peuvent pas être encodées et décodées en Base64",
@@ -279,7 +300,7 @@
"TAG_MAX_LENGTH_EXPLAIN": "La longueur de la balise ne doit pas dépasser 30 caractères.",
"TUTORIAL_NOT_SHOW_AGAIN": "Ne pas montrer de nouveau",
"TUTORIAL_SWIPE_LEFT": "Balayez vers la gauche pour supprimer l'enregistrement correspondant.",
- "TUTORIAL_SWIPE_RIGHT": "Balayez vers la droite pour mettre en signet le texte de l'enregistrement correspondant.",
+ "TUTORIAL_SWIPE_RIGHT": "Balayez vers la droite pour mettre en signet le texte de l'enregistrement / modifier la balise du signet correspondant.",
"UNDO_DELETE": "Vous pouvez annuler la suppression",
"VIBRATION_EXPLAIN": "Fournir des vibrations ou un retour haptique. Veuillez noter que tous les appareils ne prennent pas en charge cette fonctionnalité."
},
@@ -295,7 +316,7 @@
"UPC": "Code produit universel"
},
"UPDATE": {
- "UPDATE_NOTES_ANDROID": "Cette version vous apporte plusieurs mises à jour et nouvelles fonctionnalités. Veuillez consulter GitHub pour plus de détails.
Les utilisateurs d'Android peuvent désormais activer la vignette Simple QR dans le panneau Paramètres rapides pour un accès rapide.
",
- "UPDATE_NOTES_IOS": "Cette version vous apporte plusieurs mises à jour et nouvelles fonctionnalités. Veuillez consulter GitHub pour plus de détails."
+ "UPDATE_NOTES_ANDROID": "Cette version vous apporte plusieurs mises à jour et nouvelles fonctionnalités. Veuillez consulter GitHub pour plus de détails.
",
+ "UPDATE_NOTES_IOS": "Cette version vous apporte plusieurs mises à jour et nouvelles fonctionnalités. Veuillez consulter GitHub pour plus de détails.
"
}
}
\ No newline at end of file
diff --git a/src/assets/i18n/it.json b/src/assets/i18n/it.json
index 2ab23f2..575e0d1 100644
--- a/src/assets/i18n/it.json
+++ b/src/assets/i18n/it.json
@@ -21,6 +21,7 @@
"AUTO_KILL_BACKGROUND": "Eliminazione background automatica",
"AUTO_LOGGING": "Logging automatico",
"AUTO_MAX_BRIGHTNESS": "Luminosità massima automatica",
+ "AUTO_OPEN_URL": "Apri URL automaticamente",
"AUTO_QR_CODE_POPUP": "Codice QR Pop-up automatico",
"BACKGROUND_COLOR": "Colore di sfondo",
"BACKING_UP": "Eseguendo il backup",
@@ -34,6 +35,7 @@
"BOOKMARKED": "Aggiunto ai preferiti",
"BOOKMARKED_TEXTS": "Testi preferiti",
"BOOKMARKS": "Segnalibri",
+ "BRAVE_SEARCH": "Brave Search",
"BROWSE": "Naviga",
"BROWSER": "Browser",
"BROWSE_WEBSITE": "Sfoglia il sito web",
@@ -45,6 +47,7 @@
"CLOSE": "Chiudi",
"COLOR": "Colore",
"COLOR_THEME": "Tema colore",
+ "COMING_SOON": "Prossimamente",
"CONTACT_METHOD": "Metodi di contatto",
"CONTACT_NAME": "Nome",
"CONTENT": "Contenuto",
@@ -65,6 +68,7 @@
"DETAILED": "Dettagli",
"DONE": "Completato",
"DUCK_DUCK_GO": "DuckDuckGo",
+ "ECOSIA": "Ecosia",
"EDIT": "Modifica",
"EMAIL_ADDRESS": "Email",
"EMAIL_BODY": "Corpo della mail",
@@ -77,6 +81,9 @@
"ERROR_CORRECTION_LEVEL": "Errore di correttezza",
"EXIT": "Esci",
"EXIT_APP": "Esci dall'app",
+ "EXPORT": "Esporta",
+ "EXPORTING": "Esportazione in corso",
+ "EXPORT_TO_CSV": "Esporta in CSV",
"FAX_NUMBER": "Numero fax",
"FEMALE": "Donna",
"FIRST_NAME": "Nome",
@@ -85,6 +92,7 @@
"FULL_RESET": "Reset",
"FUNCTIONS": "Opzioni",
"GENDER": "Sesso",
+ "GEOLOCATION": "Geolocalizzazione",
"GOOGLE_SEARCH": "Ricerca con Google",
"HAPTIC_FEEDBACK_ONLY": "Feedback disponibile solo tramite Haptic",
"HIDDEN_NETWORK_?": "Rete nascosta?",
@@ -92,11 +100,13 @@
"HOME_PHONE_NUMBER": "Numero di telefono di casa",
"ICON_ONLY": "Disponibile solo icona",
"IMPORT": "Importa",
+ "IMPORT_FROM_CSV": "Importa da CSV",
"IMPORT_IMAGE": "Importa immagine",
"INITIAL_SEGMENT": "Segmento iniziale",
"JOB_TITLE": "Titolo di lavoro",
"LANGUAGE": "Lingua",
"LAST_NAME": "Cognome",
+ "LATITUDE": "Latitudine",
"LEVEL_H": "Livello H",
"LEVEL_L": "Livello L",
"LEVEL_M": "Livello M",
@@ -107,12 +117,15 @@
"LOCK_PORTRAIT": "Blocca vista verticale",
"LOG": "Log",
"LOG_BACKUP_AND_RESTORE": "Logga, Esegui backup & Ripristina",
+ "LONGITUDE": "Longitudine",
"MALE": "Uomo",
+ "MANAGE_RECORDS": "Gestisci record",
"MARGIN": "Margine",
"MESSAGE": "Messaggio",
"MESSAGE_CONTENT": "Contenuto del messaggio",
"MICROSOFT_BING": "Microsoft Bing",
"MOBILE_PHONE_NUMBER": "Numero di telefono cellulare",
+ "MORE": "Più",
"NAME": "Nome",
"NO": "No",
"NONE": "Nessuno",
@@ -127,6 +140,7 @@
"OPEN": "Aprire",
"OPEN_URL": "Aprire l'URL",
"OPEN_WITH_...": "Apri con...",
+ "OPTIMIZING_DATA_...": "Ottimizzazione dei dati...",
"ORGANIZATION": "Organizzazione",
"ORIGINAL": "Orginale",
"OTHERS": "Altri",
@@ -156,6 +170,8 @@
"RESET_DEFAULT": "Ripristina predefinito",
"RESTORE": "Ripristina",
"RESULT": "Risultato",
+ "SAVE": "Salva",
+ "SAVED": "Salvato",
"SCAN": "Scannerizza",
"SCANNED": "Scannerizzato",
"SCANNING_FEEDBACK_ONLY": "Scansione esclusivamente del feedback",
@@ -200,6 +216,7 @@
"VIEW_GITHUB": "Visualizza GitHub",
"VIEW_LOG": "Visualizza Log",
"VIEW_STORE_AND_SOURCE_CODE": "Visualizza Store & Codice Sorgente",
+ "VIEW_INSTRUCTIONS": "Visualizza le istruzioni",
"WEBSITE": "Sito Web",
"WIFI": "WiFi",
"WIFI_ENCRYPTION": "Crittografia WiFi",
@@ -214,6 +231,7 @@
"AUTO_KILL_BACKGROUND_EXPLAIN": "Per salvare risorse e batteria, setta automaticamente la durata massima per killare l'app automaticamente quando viene eseguita in background.
Se selezioni Segui le impostazioni di sistema, l'app verrà controllata dal sistema e non sarà possibile killarla in autonomia.
Considera che in alcune situazioni, il sistema potrebbe interrompere l'app in anticipo..
",
"AUTO_LOGGING_EXPLAIN": "Qualsiasi contenuto dei codici QR e a barre vengono loggate e salvate automaticamente in seguito alla scannerizzazione, creazione o successiva visualizzazione. Puoi rivederla nella pagina di Log.",
"AUTO_MAX_BRIGHTNESS_EXPLAIN": "La luminosità dello schermo è settata automaticamente al massimo quando si visualizza un codice QR.",
+ "AUTO_OPEN_URL_EXPLAIN": "Quando il codice QR viene scansionato e il contenuto è un URL, l'URL verrà aperto automaticamente.",
"AUTO_SHOW_QR_EXPLAIN": "Visualizza automaticamente il codice QR nella pagina dei risultati dopo le seguenti azioni.",
"BACKUP_EXPLAIN": "È possibile eseguire il backup di tutti i record e i segnalibri localmente. Ti verrà fornita una serie di chiavi segrete dopo il backup. Salvale in modo sicuro, altrimenti non sarà possibile ripristinare il backup. Si prega di notare che Simple QR non supporta il backup e il ripristino multipiattaforma.",
"BACKUP_FAILED": "Tentativo di backup fallito",
@@ -221,7 +239,6 @@
"BACKUP_SUCCESSFULLY": "Backup riuscito. Si prega di salvare il file di backup e salvare la seguente chiave segreta in modo sicuro
{secret}
",
"BARCODE_TYPE": "Scannerizzazione- Codice QR
- Codice a barre 1D
- Codice Aztec
- Matrice di Dati
- PDF417
Importa ImmagineCrea",
"BOOKMARKED": "Segnalibro salvato con successo",
- "BOOKMARK_TUTORIAL_SWIPE_RIGHT": "Scorri verso destra per modificare il tag del segnalibro corrispondente.",
"BUTTON_DISPLAY_EXPLAIN": "Mostra o nascondi il pulsante operazione.",
"BUTTON_STYLE_EXPLAIN": "Scegli lo stile del pulsante operazione.",
"CAMERA_PERMISSION": "Per abilitare la scansione, è necessario concedere l'autorizzazione Fotocamera.",
@@ -236,10 +253,14 @@
"EMAIL_SUBJECT_MAX_LENGTH": "Massimo 78 caratteri",
"ERROR_CORRECTION_LEVEL_EXPLAIN": "Il codice QR ha la capacità di correzione degli errori per ripristinare i dati anche se il codice è danneggiato.
Sono disponibili 4 livelli::
Il Livello L recupera il 7% di byte di dati.
Il Livello M recupera il 15% dei byte di dati.
Il Livello Q recupera il 25% di byte di dati.
Il Livello H recupera il 30% di byte di dati.
Si ricorda che l'innalzamento del livello può migliorare la capacità di correzione degli errori, ma aumenta anche la dimensione del codice QR. Pertanto, per i casi generali, si raccomanda il livello M.
",
"EXIT_APP": "Sei sicuro di voler uscire?
Se ti piace Simple QR, valutala sullo store
",
+ "EXPORT_TO_CSV_EXPLAIN": "Puoi esportare tutti i record e i segnalibri in un file CSV.",
"FAILED_SAVING_CONTACT": "Salvataggio dei dati fallito",
"FAIL_PREPARE_SMS": "Impossibile inviare il messaggio",
+ "IMPORT_FAILED": "Impossibile importare",
+ "IMPORT_FROM_CSV_EXPLAIN": "Puoi importare record e segnalibri da un file CSV con il formato definito da Simple QR. Se desideri trasferire dati tra Android e iOS, utilizza questa funzione.",
"INPUT_TAG": "Si prega di dare un tag al segnalibro",
"INVALID_BK_FILE": "Backup non valido.",
+ "INVALID_CSV_FILE": "CSV non valido.",
"NOT_BASE64_DE": "I dati non possono essere decodificati in Base64",
"NOT_BASE64_EN": "I dati non possono essere decodificati in Base64",
"NOT_BASE64_EN_DE": "I dati non possono essere decodificati in Base64",
@@ -279,7 +300,7 @@
"TAG_MAX_LENGTH_EXPLAIN": "La lunghezza del tag non deve superare i 30 caratteri.",
"TUTORIAL_NOT_SHOW_AGAIN": "Non mostrare di nuovo",
"TUTORIAL_SWIPE_LEFT": "Scorri verso sinistra per eliminare il record corrispondente.",
- "TUTORIAL_SWIPE_RIGHT": "Scorri verso destra per aggiungere ai segnalibri il testo del record corrispondente.",
+ "TUTORIAL_SWIPE_RIGHT": "Scorri verso destra per aggiungere ai segnalibri il testo del record / modificare il tag del segnalibro corrispondente.",
"UNDO_DELETE": "È possibile annullare l'eliminazione",
"VIBRATION_EXPLAIN": "Fornire vibrazioni o feedback tattile. Tieni presente che non tutti i dispositivi supportano questa funzione."
},
@@ -295,7 +316,7 @@
"UPC": "Codice Prodotto Universale "
},
"UPDATE": {
- "UPDATE_NOTES_ANDROID": "Questa versione offre numerosi aggiornamenti e nuove funzionalità. Si prega di controllare GitHub per i dettagli.
Gli utenti Android possono ora abilitare il riquadro Simple QR nel pannello Impostazioni rapide per un rapido accesso.
",
- "UPDATE_NOTES_IOS": "Questa versione offre numerosi aggiornamenti e nuove funzionalità. Si prega di controllare GitHub per i dettagli."
+ "UPDATE_NOTES_ANDROID": "Questa versione offre numerosi aggiornamenti e nuove funzionalità. Si prega di controllare GitHub per i dettagli.
",
+ "UPDATE_NOTES_IOS": "Questa versione offre numerosi aggiornamenti e nuove funzionalità. Si prega di controllare GitHub per i dettagli.
"
}
}
\ No newline at end of file
diff --git a/src/assets/i18n/pt-BR.json b/src/assets/i18n/pt-BR.json
new file mode 100644
index 0000000..c3274f0
--- /dev/null
+++ b/src/assets/i18n/pt-BR.json
@@ -0,0 +1,322 @@
+{
+ "100_RECORDS": "100 Registros",
+ "30_RECORDS": "30 Registros",
+ "49_DIGIT": "49 dígitos",
+ "50_RECORDS": "50 Registros",
+ "ABOUT": "Sobre",
+ "ABOUT_SIMPLE_QR": "Sobre o Simple QR",
+ "ADD": "Adicionar",
+ "ADD_BCC": "Adicionar CCO",
+ "ADD_CC": "Adicionar CC",
+ "ADD_CONTACT": "Adicionar Contato",
+ "ADD_RECIPIENT": "Adicionar Destinatário",
+ "APP": "Aplicativo",
+ "APPEARANCE_AND_EFFECTS": "Aparência e Efeitos",
+ "APP_INITIAL_PAGE": "Página Inicial do Aplicativo",
+ "APP_VERSION": "Versão do Aplicativo",
+ "AT": "em",
+ "AT_LEAST_1_MINUTE_LATER": "Pelo Menos 1 Minuto Depois",
+ "AT_LEAST_3_MINUTES_LATER": "Pelo Menos 3 Minutos Depois",
+ "AT_LEAST_5_MINUTES_LATER": "Pelo Menos 5 Minutos Depois",
+ "AUTO_KILL_BACKGROUND": "Encerrar Automaticamente em Segundo Plano",
+ "AUTO_LOGGING": "Registro Automático",
+ "AUTO_MAX_BRIGHTNESS": "Brilho Máximo Automático",
+ "AUTO_OPEN_URL": "Abrir URL Automaticamente",
+ "AUTO_QR_CODE_POPUP": "Popup de Código QR Automático",
+ "BACKGROUND_COLOR": "Cor de Fundo",
+ "BACKING_UP": "Fazendo Backup",
+ "BACKUP": "Backup",
+ "BASE64": "Base64",
+ "BASE64_DECODED": "Base64 Decodificado",
+ "BASE64_ENCODED": "Base64 Codificado",
+ "BCC": "CCO",
+ "BLACK": "Preto",
+ "BOOKMARK": "Favoritar",
+ "BOOKMARKED": "Favoritado",
+ "BOOKMARKED_TEXTS": "Textos Favoritados",
+ "BOOKMARKS": "Favoritos",
+ "BRAVE_SEARCH": "Busca Brave",
+ "BROWSE": "Pesquisar",
+ "BROWSER": "Navegador",
+ "BROWSE_WEBSITE": "Navegar no Site",
+ "CALL": "Chamada",
+ "CANCEL": "Cancelar",
+ "CC": "CC",
+ "CITY": "Cidade",
+ "CLEAR": "Limpar",
+ "CLOSE": "Fechar",
+ "COLOR": "Cor",
+ "COLOR_THEME": "Tema de Cores",
+ "COMING_SOON": "Em Breve",
+ "CONTACT_METHOD": "Método de Contato",
+ "CONTACT_NAME": "Nome do Contato",
+ "CONTENT": "Conteúdo",
+ "CONTENT_TYPE": "Tipo de Conteúdo",
+ "COPIED": "Copiado",
+ "COPY": "Copiar",
+ "COPY_SECRET_AND_SAVE_BACKUP": "Copiar Segredo e Salvar Backup",
+ "COPY_TEXT": "Copiar Texto",
+ "COUNTRY": "País",
+ "CREATE": "Criar",
+ "CREATED": "Criado",
+ "CREATE_QR_CODE": "Criar Código QR",
+ "DARK": "Escuro",
+ "DATE_OF_BIRTH": "Data de Nascimento",
+ "DEBUG_MODE": "Modo de Depuração",
+ "DECODING": "Decodificando",
+ "DECRYPTING": "Descriptografando",
+ "DETAILED": "Detalhado",
+ "DONE": "Concluído",
+ "DUCK_DUCK_GO": "DuckDuckGo",
+ "ECOSIA": "Ecosia",
+ "EDIT": "Editar",
+ "EMAIL_ADDRESS": "Endereço de E-mail",
+ "EMAIL_BODY": "Corpo do E-mail",
+ "EMAIL_NTT_DOCOMO": "E-mail (NTT Docomo)",
+ "EMAIL_RECIPIENT": "Destinatário do E-mail",
+ "EMAIL_SUBJECT": "Assunto do E-mail",
+ "EMAIL_TO": "Enviar E-mail para",
+ "EMAIL_W3C_STANDARD": "E-mail (Padrão W3C)",
+ "ENCRYPTING": "Criptografando",
+ "ERROR_CORRECTION_LEVEL": "Nível de Correção de Erro",
+ "EXIT": "Sair",
+ "EXIT_APP": "Sair do Aplicativo",
+ "EXPORT": "Exportar",
+ "EXPORTING": "Exportando",
+ "EXPORT_TO_CSV": "Exportar para CSV",
+ "FAX_NUMBER": "Número de Fax",
+ "FEMALE": "Feminino",
+ "FIRST_NAME": "Nome Próprio",
+ "FOLLOW_SYSTEM_SETTINGS": "Seguir Configurações do Sistema",
+ "FREE_TEXT": "Texto Livre",
+ "FULL_RESET": "Redefinição Completa",
+ "FUNCTIONS": "Funções",
+ "GENDER": "Gênero",
+ "GEOLOCATION": "Geolocalização",
+ "GOOGLE_SEARCH": "Busca Google",
+ "HAPTIC_FEEDBACK_ONLY": "Apenas Feedback Háptico",
+ "HIDDEN_NETWORK_?": "Rede Oculta?",
+ "HOME_ADDRESS": "Endereço Residencial",
+ "HOME_PHONE_NUMBER": "Número de Telefone Residencial",
+ "ICON_ONLY": "Apenas Ícone",
+ "IMPORT": "Importar",
+ "IMPORT_FROM_CSV": "Importar do CSV",
+ "IMPORT_IMAGE": "Importar Imagem",
+ "INITIAL_SEGMENT": "Segmento Inicial",
+ "JOB_TITLE": "Cargo",
+ "LANGUAGE": "Idioma",
+ "LAST_NAME": "Sobrenome",
+ "LATITUDE": "Latitude",
+ "LEVEL_H": "Nível H",
+ "LEVEL_L": "Nível L",
+ "LEVEL_M": "Nível M",
+ "LEVEL_Q": "Nível Q",
+ "LIGHT": "Claro",
+ "LOADING_DATA": "Carregando Dados",
+ "LOCK_LANDSCAPE": "Travar em Paisagem",
+ "LOCK_PORTRAIT": "Travar em Retrato",
+ "LOG": "Registro",
+ "LOG_BACKUP_AND_RESTORE": "Registro, Backup e Restauração",
+ "LONGITUDE": "Longitude",
+ "MALE": "Masculino",
+ "MANAGE_RECORDS": "Gerenciar Registros",
+ "MARGIN": "Margem",
+ "MESSAGE": "Mensagem",
+ "MESSAGE_CONTENT": "Conteúdo da Mensagem",
+ "MICROSOFT_BING": "Microsoft Bing",
+ "MOBILE_PHONE_NUMBER": "Número de Celular",
+ "MORE": "Mais",
+ "NAME": "Nome",
+ "NO": "Não",
+ "NONE": "Nenhum",
+ "NOT_AVAILABLE": "Não Disponível",
+ "NOT_PROVIDED": "Não Fornecido",
+ "NOT_TO_DISCLOSE": "Não Divulgar",
+ "NO_LIMIT": "Sem Limite",
+ "NUMBER_OF_RECORDS": "Número de Registros",
+ "OK": "OK",
+ "ONLY_DELETE_DATA": "Apenas Excluir Dados",
+ "ONLY_RESET_SETTING": "Apenas Restaurar Configuração",
+ "OPEN": "Abrir",
+ "OPEN_URL": "Abrir URL",
+ "OPEN_WITH_...": "Abrir com...",
+ "OPTIMIZING_DATA_...": "Otimizando Dados...",
+ "ORGANIZATION": "Organização",
+ "ORIGINAL": "Original",
+ "OTHERS": "Outros",
+ "PASSWORD": "Senha",
+ "PATCH_NOTES": "Notas de Atualização",
+ "PERMISSION_REQUIRED": "Permissão Necessária",
+ "PERSONAL": "Pessoal",
+ "PHONE_NO": "Nº de Telefone",
+ "PHONE_NUMBER": "Número de Telefone",
+ "PLEASE_WAIT": "Aguarde, por favor",
+ "POSTAL_CODE": "Código Postal",
+ "PREPARING": "Preparando",
+ "PREVIEW": "Pré-visualização",
+ "PRIVACY_POLICY": "Política de Privacidade",
+ "QR_CODE": "Código QR",
+ "QR_CODE_AND_DECODED_RESULT": "Código QR e Resultado Decodificado",
+ "QR_CODE_CONTENT": "Conteúdo do Código QR",
+ "QR_CODE_STYLE": "Estilo do Código QR",
+ "RATE_THE_APP": "Avalie o Aplicativo",
+ "RECORDS_LIMIT": "Limite de Registros",
+ "REMOVE_ALL": "Remover Todos",
+ "REMOVE_BCC": "Remover CCO",
+ "REMOVE_CC": "Remover CC",
+ "REMOVE_RECIPIENT": "Remover Destinatário",
+ "REPORT_ISSUE": "Reportar Problema",
+ "RESET_APP": "Redefinir o Aplicativo",
+ "RESET_DEFAULT": "Redefinir para o Padrão",
+ "RESTORE": "Restaurar",
+ "RESULT": "Resultado",
+ "SAVE": "Salvar",
+ "SAVED": "Salvo",
+ "SCAN": "Escanear",
+ "SCANNED": "Escaneado",
+ "SCANNING_FEEDBACK_ONLY": "Apenas Feedback de Escaneamento",
+ "SCAN_BY_CAMERA": "Escanear pela Câmera",
+ "SCREEN_ORIENTATION": "Orientação da Tela",
+ "SEARCH": "Pesquisa",
+ "SEARCH_ENGINE": "Mecanismo de Busca",
+ "SECRET": "Segredo",
+ "SEND": "Enviar",
+ "SEND_EMAIL": "Enviar E-mail",
+ "SEND_MESSAGE": "Enviar Mensagem",
+ "SETTING": "Configuração",
+ "SETTINGS": "Configurações",
+ "SHARE": "Compartilhar",
+ "SHARING": "Compartilhando",
+ "SHOW": "Mostrar",
+ "SHOW_NUMBER_OR_RECORDS": "Mostrar Número de Registros",
+ "SHOW_QR_CODE": "Mostrar Código QR",
+ "SIMPLE_QR": "Simple QR",
+ "STATE": "Estado",
+ "STREET": "Rua",
+ "SUCCESS": "Sucesso",
+ "SUPPORTED_BARCODE_TYPE": "Tipo de Código de Barras Suportado",
+ "SUPPORTED_TYPE": "Tipo Suportado",
+ "SYSTEM_DEFAULT": "Padrão do Sistema",
+ "TASK": "Tarefa",
+ "TASK_BUTTON_LAYOUT": "Layout dos Botões de Tarefa",
+ "TURN_OFF": "Desligar",
+ "TURN_ON": "Ligar",
+ "TURNED_OFF": "Desligado",
+ "TURNED_ON": "Ligado",
+ "TUTORIAL": "Tutorial",
+ "UNDO": "Desfazer",
+ "UNKNOWN": "Desconhecido",
+ "UPDATE_SUCCESSFULLY": "Atualizado com Sucesso",
+ "URL": "URL",
+ "VCARD_CONTACT": "Contato vCard",
+ "VERSION_VERSION": "Versão {version}",
+ "VIBRATION": "Vibração",
+ "VIEWED": "Visualizado",
+ "VIEW_BOOKMARK": "Visualizar Favorito",
+ "VIEW_GITHUB": "Visualizar GitHub",
+ "VIEW_LOG": "Visualizar Registro",
+ "VIEW_STORE_AND_SOURCE_CODE": "Visualizar Loja e Código-fonte",
+ "VIEW_INSTRUCTIONS": "Visualizar Instruções",
+ "WEBSITE": "Site",
+ "WIFI": "Wi-Fi",
+ "WIFI_ENCRYPTION": "Criptografia do Wi-Fi",
+ "WIFI_SSID": "SSID do Wi-Fi",
+ "WORK": "Trabalho",
+ "WORK_PHONE_NUMBER": "Número de Telefone do Trabalho",
+ "YAHOO_SEARCH": "Busca Yahoo!",
+ "YANDEX": "Yandex",
+ "YES": "Sim",
+ "MSG": {
+ "ALREADY_BOOKMARKED": "Falha! Já favoritado anteriormente",
+ "AUTO_KILL_BACKGROUND_EXPLAIN": "Para economizar recursos do sistema e bateria, defina o tempo para encerrar automaticamente o aplicativo quando ele estiver em execução em segundo plano.
Se você escolher Seguir Configurações do Sistema, o aplicativo será totalmente controlado pelo sistema e não será encerrado por si próprio.
Observe que em algumas situações, o sistema pode interromper o aplicativo antecipadamente.
",
+ "AUTO_LOGGING_EXPLAIN": "Cada conteúdo de código QR e código de barras é registrado e armazenado automaticamente depois de escaneado, criado ou visualizado novamente. Você pode visualizá-los na página de Registro.",
+ "AUTO_MAX_BRIGHTNESS_EXPLAIN": "O brilho da tela é ajustado automaticamente para o máximo ao exibir um código QR.",
+ "AUTO_OPEN_URL_EXPLAIN": "Quando um código QR é escaneado e o conteúdo é uma URL, a URL será aberta automaticamente.",
+ "AUTO_SHOW_QR_EXPLAIN": "Pop-up automático de código QR na página de Resultado após as ações a seguir.",
+ "BACKUP_EXPLAIN": "Você pode fazer backup de todos os registros e favoritos localmente. Você receberá um conjunto de segredos após o backup. Mantenha o segredo com segurança, caso contrário, você não poderá restaurar o backup. Observe que o Simple QR não oferece suporte a backup e restauração entre plataformas diferentes.",
+ "BACKUP_FAILED": "Falha ao fazer backup",
+ "BACKUP_FAILED_2": "Falha ao fazer backup. Verifique se a permissão de armazenamento foi concedida.",
+ "BACKUP_SUCCESSFULLY": "Backup feito com sucesso. Salve o arquivo de backup e mantenha o segunte segredo com segurança
{secret}
",
+ "BARCODE_TYPE": "Escanear- Código QR
- Código de Barras 1D
- Código Azteca
- Matriz de Dados
- PDF417
Importar ImagemCriar",
+ "BOOKMARKED": "Favoritado com Sucesso",
+ "BUTTON_DISPLAY_EXPLAIN": "Mostrar ou ocultar os botões de tarefa.",
+ "BUTTON_STYLE_EXPLAIN": "Escolha o estilo dos botões de tarefa.",
+ "CAMERA_PERMISSION": "Para habilitar a digitalização, você deve conceder a permissão de câmera.",
+ "CONTACT_PERMISSION": "Você deve conceder a permissão de Contatos para salvar o contato.",
+ "COPIED_SECRET": "Segredo copiado",
+ "COPY_TEXT": "Qual conteúdo você deseja copiar?",
+ "CREATE_QRCODE_MAX_LENGTH": "Máx. 1817 caracteres",
+ "CREATE_QRCODE_MAX_LENGTH_EXPLAIN": "O comprimento do conteúdo gerado do código QR não deve exceder 1817 caracteres.",
+ "DEBUG_MODE_ON": "Modo de Depuração ativado com sucesso",
+ "DELETE_OVERFLOWED_RECORDS": "Após sair desta página, os registros excedentes serão excluídos permanentemente.",
+ "EMAIL_MAX_LENGTH": "Máx. 254 caracteres",
+ "EMAIL_SUBJECT_MAX_LENGTH": "Máx. 78 caracteres",
+ "ERROR_CORRECTION_LEVEL_EXPLAIN": "O código QR tem a capacidade de correção de erros para restaurar dados mesmo se o código estiver danificado.
Há 4 níveis disponíveis:
O nível L restaura 7% dos bytes de dados.
O nível M restaura 15% dos bytes de dados.
O nível Q restaura 25% dos bytes de dados.
O nível H restaura 30% dos bytes de dados.
Por favor, lembre-se de que elevar o nível pode melhorar a capacidade de correção de erros, mas também aumenta o tamanho do código QR. Portanto, para casos gerais, é recomendado o nível M.
",
+ "EXIT_APP": "Tem certeza de que deseja sair do aplicativo?
Se você gosta do Simple QR, por favor, avalie-o na loja.
",
+ "EXPORT_TO_CSV_EXPLAIN": "Você pode exportar todos os registros e favoritos para um arquivo CSV.",
+ "FAILED_SAVING_CONTACT": "Falha ao salvar o contato",
+ "FAIL_PREPARE_SMS": "Falha ao enviar mensagem",
+ "IMPORT_FAILED": "Falha na importação",
+ "IMPORT_FROM_CSV_EXPLAIN": "Você pode importar registros e favoritos de um arquivo CSV com o formato definido pelo Simple QR. Se você deseja transferir dados entre Android e iOS, use essa função.",
+ "INPUT_TAG": "Por favor, dê uma etiqueta ao favorito",
+ "INVALID_BK_FILE": "Este não é um arquivo de backup válido.",
+ "INVALID_CSV_FILE": "Este não é um arquivo CSV válido.",
+ "NOT_BASE64_DE": "Os dados não podem ser decodificados em Base64",
+ "NOT_BASE64_EN": "Os dados não podem ser codificados em Base64",
+ "NOT_BASE64_EN_DE": "Os dados não podem ser codificados e decodificados em Base64",
+ "NO_QR_CODE": "Não é possível detectar o Código QR",
+ "ONLY_VCARD_3_0": "Apenas vCard 3.0 é suportado",
+ "PLEASE_INPUT_VALID_SECRET": "Por favor, insira um código válido",
+ "PORTRAIT_ONLY": "Retrato bloqueado",
+ "PREPARE_SMS": "Preparando mensagem",
+ "PREVIOUS_RECORDS": "Registros anteriores de escaneamento, criação ou visualização",
+ "QR_CODE_VALUE_NOT_EMPTY": "O valor do Código QR não pode estar vazio",
+ "READ_IMAGE_PERMISSION": "Você deve conceder permissão de Armazenamento para escanear imagem.",
+ "RECORDS_LIMIT_EXPLAIN": "Limite o número de registros que podem ser armazenados. O registro mais antigo será excluído quando o limite for atingido.",
+ "REMOVE_ALL_BOOKMARKS": "Tem certeza de que deseja remover todos os textos favoritados? Esta ação não pode ser desfeita.",
+ "REMOVE_ALL_RECORD": "Tem certeza de que deseja remover todos os registros? Esta ação não pode ser desfeita.",
+ "RESET_APP": "Tem certeza de que deseja redefinir este aplicativo e excluir todos os dados? Esta ação não pode ser desfeita.",
+ "RESET_DEFAULT": "Tem certeza de que deseja redefinir para o padrão?",
+ "RESTORE_EXPLAIN": "Você pode restaurar um backup anterior de registros e favoritos. Os itens do backup serão mesclados aos registros existentes. O tipo de arquivo de backup deve ser TFSQBK.",
+ "RESTORE_EXPLAIN_IOS": "Você pode restaurar um backup anterior de registros e favoritos. Os itens do backup serão mesclados aos registros existentes. O tipo de arquivo de backup deve ser ISQBK.",
+ "RESTORE_FAILED": "Falha ao restaurar",
+ "RESTORE_SECRET": "Por favor, insira o código para restaurar os registros",
+ "RESTORE_SUCCESSFUL": "Restaurado com sucesso",
+ "RESTORE_WRONG_SECRET": "Código incorreto",
+ "SAVED_CONTACT": "Contato salvo",
+ "SAVING_CONTACT": "Salvando contato",
+ "SCAN_QR_FROM_IMAGE": "O Simple QR utiliza o módulo \"cozmo/jsQR\" para escanear códigos QR a partir de imagens. Para escanear com sucesso,",
+ "SCAN_QR_FROM_IMAGE_R1": "Autorize o aplicativo a acessar o Armazenamento ou a Biblioteca de Fotos.",
+ "SCAN_QR_FROM_IMAGE_R2": "Certifique-se de que o plano de fundo da imagem selecionada não seja transparente. É recomendável escolher uma imagem que não seja capturada pela câmera.",
+ "SCAN_QR_FROM_IMAGE_R3": "Cancele a edição de fotos se desejar escanear a imagem inteira. (se aplicável)",
+ "SEARCH": "Qual conteúdo você deseja buscar?",
+ "SEARCH_ENGINE_EXPLAIN": "Escolha o mecanismo de busca para as pesquisas.",
+ "SHARE_QR": "Apenas escaneie!\n\nCompartilhado pelo Simple QR",
+ "SMS_MAX_LENGTH": "Máx. 160 caracteres",
+ "SSID_MAX_LENGTH": "Máx. 32 caracteres",
+ "START_PAGE_EXPLAIN": "Escolha a página inicial do aplicativo.",
+ "START_PAGE_HEADER_EXPLAIN": "Mostrar o cabeçalho do Simple QR na página inicial.",
+ "TAG_MAX_LENGTH": "Máx. 30 caracteres",
+ "TAG_MAX_LENGTH_EXPLAIN": "O comprimento da etiqueta não deve exceder 30 caracteres.",
+ "TUTORIAL_NOT_SHOW_AGAIN": "Não mostrar novamente",
+ "TUTORIAL_SWIPE_LEFT": "Deslize para a esquerda para excluir o registro correspondente.",
+ "TUTORIAL_SWIPE_RIGHT": "Deslize para a direita para marcar o texto do registro correspondente / editar a etiqueta do marcador correspondente.",
+ "UNDO_DELETE": "Você pode desfazer a exclusão",
+ "VIBRATION_EXPLAIN": "Forneça vibração ou feedback tátil. Observe que nem todos os dispositivos suportam essa funcionalidade."
+ },
+ "BARCODE_TYPE": {
+ "1D": "Código de Barras 1D ",
+ "AZTEC": "Código Azteca ",
+ "DATA_MATRIX": "Matriz de Dados ",
+ "EAN": "Número de Artigo Europeu ",
+ "MAXICODE": "MaxiCode ",
+ "PDF_417": "PDF417 ",
+ "QR_CODE": "Código QR ",
+ "RSS": "GS1 DataBar ",
+ "UPC": "Código de Produto Universal "
+ },
+ "UPDATE": {
+ "UPDATE_NOTES_ANDROID": "Esta versão traz várias atualizações e novos recursos. Por favor, verifique o GitHub para obter detalhes.
",
+ "UPDATE_NOTES_IOS": "Esta versão traz várias atualizações e novos recursos. Por favor, verifique o GitHub para obter detalhes.
"
+ }
+}
\ No newline at end of file
diff --git a/src/assets/i18n/ru.json b/src/assets/i18n/ru.json
new file mode 100644
index 0000000..5eae99d
--- /dev/null
+++ b/src/assets/i18n/ru.json
@@ -0,0 +1,322 @@
+{
+ "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_OPEN_URL": "Открывать URL автоматически",
+ "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": "Закладки",
+ "BRAVE_SEARCH": "Brave Search",
+ "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": "Пол",
+ "GEOLOCATION": "Геолокация",
+ "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": "Фамилия",
+ "LATITUDE": "Широта",
+ "LEVEL_H": "Уровень H",
+ "LEVEL_L": "Уровень L",
+ "LEVEL_M": "Уровень M",
+ "LEVEL_Q": "Уровень Q",
+ "LIGHT": "Светлая",
+ "LOADING_DATA": "Загрузка информации",
+ "LOCK_LANDSCAPE": "Альбомная",
+ "LOCK_PORTRAIT": "Портретная",
+ "LOG": "История",
+ "LOG_BACKUP_AND_RESTORE": "История и восстановление",
+ "LONGITUDE": "Долгота",
+ "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": "Чтобы использовать меньше системных ресурсов и батареи, выставьте количество времени, спустя которое приложение будет автоматически остановлено, если оно работает в фоне.
Если вы выберете опцию Как в системе, фоновая активность приложения будет полностью контролироваться системой, приложение не будет приостанавливать свою работу самостоятельно.
Заметьте, что в некоторых ситуациях система может останавливать приложение заблаговременно.
",
+ "AUTO_LOGGING_EXPLAIN": "Содержание каждого QR-Кода и Бар-Кода автоматически сохраняется после сканирования. Вы можете повторно обращаться к этим записям в разделе Истории.",
+ "AUTO_MAX_BRIGHTNESS_EXPLAIN": "Автоматически увеличивать яркость экрана до максимального значения во время просмотра QR-Кода.",
+ "AUTO_OPEN_URL_EXPLAIN": "Когда QR-код сканируется, а содержимое представляет собой URL-адрес, URL-адрес будет открыт автоматически.",
+ "AUTO_SHOW_QR_EXPLAIN": "Автоматически показывать QR-Код на странице результата после этих действий.",
+ "BACKUP_EXPLAIN": "Вы можете создать локальную резервную копию всех записей истории и закладок. Вам будет выдан набор ключей после резервного копирования. Сохраняйте эти ключи, иначе вы не сможете восстановить созданную резервную копию. Заметьте, что Simple QR не поддерживает резервное копирование между разными платформами.",
+ "BACKUP_FAILED": "Не удалось создать резервную копию",
+ "BACKUP_FAILED_2": "Не удалось создать резервную копию. Пожалуйста, убедитесь, что приложению выдано разрешение на взаимодействие с файлами.",
+ "BACKUP_SUCCESSFULLY": "Резервное копирование успешно завершено. Пожалуйста, сохраните файл резервной копии и следующий ключ
{secret}
",
+ "BARCODE_TYPE": "Сканирование- QR-Код
- Бар-Код
- Код Aztec
- Data Matrix
- PDF417
Импорт изображенияСоздание",
+ "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": "В структуру QR-Кодов заложена способность восстановления информации, даже если Код поврежден.
Существует 4 уровня такой защиты:
Уровень L восстанавливает 7% байт информации.
Уровень M восстанавливает 15% байт информации.
Уровень Q восстанавливает 25% байт информации.
Уровень H восстанавливает 30% байт информации.
Заметьте, что увеличение уровня защиты может увеличить вероятность восстановления информации, но также увеличивает размер QR-Кода. Поэтому, при обычных условиях рекомендуем использовать уровень M.
",
+ "EXIT_APP": "Уверены, что хотите покинуть приложение?
Если вам нравится Simple QR, пожалуйста, оцените его в магазине приложений.
",
+ "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": "Уверены, что хотите безвозвратно удалить все закладки?",
+ "REMOVE_ALL_RECORD": "Уверены, что хотите безвозвратно удалить все записи истории?",
+ "RESET_APP": "Уверены, что хотите вернуться к настройкам по умолчанию и удалить все данные приложения? Это действие необратимо.",
+ "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": "В этом релизе вас ждет несколько обновлений и новых функций. Посетите GitHub проекта, чтобы узнать детали.
",
+ "UPDATE_NOTES_IOS": "В этом релизе вас ждет несколько обновлений и новых функций. Посетите GitHub проекта, чтобы узнать детали.
"
+ }
+}
\ No newline at end of file
diff --git a/src/assets/i18n/zh-CN.json b/src/assets/i18n/zh-CN.json
index 9bc560f..bf8df56 100644
--- a/src/assets/i18n/zh-CN.json
+++ b/src/assets/i18n/zh-CN.json
@@ -21,6 +21,7 @@
"AUTO_KILL_BACKGROUND": "自动停止背景执行",
"AUTO_LOGGING": "自动记录",
"AUTO_MAX_BRIGHTNESS": "自动最大亮度",
+ "AUTO_OPEN_URL": "自动打开网址",
"AUTO_QR_CODE_POPUP": "自动弹出 QR 码",
"BACKGROUND_COLOR": "背景颜色",
"BACKING_UP": "备份中",
@@ -34,6 +35,7 @@
"BOOKMARKED": "已书签",
"BOOKMARKED_TEXTS": "已收藏的书签",
"BOOKMARKS": "书签",
+ "BRAVE_SEARCH": "Brave Search",
"BROWSE": "浏览",
"BROWSER": "浏览器",
"BROWSE_WEBSITE": "浏览网站",
@@ -45,6 +47,7 @@
"CLOSE": "关闭",
"COLOR": "颜色",
"COLOR_THEME": "颜色主题",
+ "COMING_SOON": "即将推出",
"CONTACT_METHOD": "联络方法",
"CONTACT_NAME": "联络人名称",
"CONTENT": "内容",
@@ -65,6 +68,7 @@
"DETAILED": "详细说明",
"DONE": "完成",
"DUCK_DUCK_GO": "DuckDuckGo",
+ "ECOSIA": "Ecosia",
"EDIT": "修改",
"EMAIL_ADDRESS": "电邮地址",
"EMAIL_BODY": "电邮内容",
@@ -77,6 +81,9 @@
"ERROR_CORRECTION_LEVEL": "容错等级",
"EXIT": "离开",
"EXIT_APP": "离开程序",
+ "EXPORT": "导出",
+ "EXPORTING": "导出中",
+ "EXPORT_TO_CSV": "导出到CSV",
"FAX_NUMBER": "传真号码",
"FEMALE": "女性",
"FIRST_NAME": "名字",
@@ -85,18 +92,21 @@
"FULL_RESET": "完整重设",
"FUNCTIONS": "功能",
"GENDER": "性别",
+ "GEOLOCATION": "地理定位",
"GOOGLE_SEARCH": "Google 搜索",
"HAPTIC_FEEDBACK_ONLY": "仅触感反馈",
"HIDDEN_NETWORK_?": "隐藏的网络?",
"HOME_ADDRESS": "家居地址",
"HOME_PHONE_NUMBER": "家居电话号码",
"ICON_ONLY": "仅限图示",
- "IMPORT": "汇入",
- "IMPORT_IMAGE": "汇入图片",
+ "IMPORT": "导入",
+ "IMPORT_FROM_CSV": "从CSV导入",
+ "IMPORT_IMAGE": "导入图片",
"INITIAL_SEGMENT": "起始分页",
"JOB_TITLE": "职位名称",
"LANGUAGE": "语言",
"LAST_NAME": "姓氏",
+ "LATITUDE": "纬度",
"LEVEL_H": "H 等级",
"LEVEL_L": "L 等级",
"LEVEL_M": "M 等级",
@@ -107,12 +117,15 @@
"LOCK_PORTRAIT": "锁定纵向",
"LOG": "记录",
"LOG_BACKUP_AND_RESTORE": "记录、备份与还原",
+ "LONGITUDE": "经度",
"MALE": "男性",
+ "MANAGE_RECORDS": "管理记录",
"MARGIN": "边距",
"MESSAGE": "信息",
"MESSAGE_CONTENT": "信息内容",
"MICROSOFT_BING": "Microsoft Bing",
"MOBILE_PHONE_NUMBER": "手提电话号码",
+ "MORE": "更多",
"NAME": "姓名",
"NO": "否",
"NONE": "没有",
@@ -127,6 +140,7 @@
"OPEN": "打开",
"OPEN_URL": "打开网址",
"OPEN_WITH_...": "以下方式打开",
+ "OPTIMIZING_DATA_...": "优化数据...",
"ORGANIZATION": "组织",
"ORIGINAL": "原始",
"OTHERS": "其他",
@@ -156,6 +170,8 @@
"RESET_DEFAULT": "还原预设值",
"RESTORE": "还原",
"RESULT": "结果",
+ "SAVE": "储存",
+ "SAVED": "已储存",
"SCAN": "扫描",
"SCANNED": "扫描",
"SCANNING_FEEDBACK_ONLY": "仅扫描反馈",
@@ -200,6 +216,7 @@
"VIEW_GITHUB": "查看 GitHub",
"VIEW_LOG": "查看记录",
"VIEW_STORE_AND_SOURCE_CODE": "查看商店及源代码",
+ "VIEW_INSTRUCTIONS": "查看说明",
"WEBSITE": "网站",
"WIFI": "WiFi",
"WIFI_ENCRYPTION": "安全性",
@@ -214,14 +231,14 @@
"AUTO_KILL_BACKGROUND_EXPLAIN": "为节省系统资源及减低耗电,当程序进入背景执行时,设定自动停止执行程序及所有背景活动的时间。
若选择由系统控制,程序本身将不会干预其运作及资源占用,全由系统控制。
请注意,在某些情况下系统可能会提前停止程序的背景运作。
",
"AUTO_LOGGING_EXPLAIN": "在您扫描、建立或查看记录时,条码内容会自动被记录并储存在本地储存空间。您可在「记录」页面浏览所有记录。",
"AUTO_MAX_BRIGHTNESS_EXPLAIN": "当显示 QR 码时,自动调校萤幕亮度到最大。",
+ "AUTO_OPEN_URL_EXPLAIN": "扫描QR码且内容为URL时,会自动打开该URL。",
"AUTO_SHOW_QR_EXPLAIN": "在进行以下已选择的动作后,自动弹出 QR 码。",
"BACKUP_EXPLAIN": "您可以为现有的扫描记录及书签进行本地备份。备份后,您会得到一组密码。请妥善保存密码,否则您无法还原此备份。请注意,简易QR并不支援跨平台备份与还原。",
"BACKUP_FAILED": "备份失败",
"BACKUP_FAILED_2": "备份失败。请确保已允许「简易QR」存取储存空间",
"BACKUP_SUCCESSFULLY": "成功备份。请妥善保存备份档及以下密码
{secret}
",
- "BARCODE_TYPE": "扫描- QR 码
- 一维条码
- Aztec 码
- 数据矩阵码
- PDF417 条码
汇入图片建立",
+ "BARCODE_TYPE": "扫描- QR 码
- 一维条码
- Aztec 码
- 数据矩阵码
- PDF417 条码
导入图片建立",
"BOOKMARKED": "成功加入书签",
- "BOOKMARK_TUTORIAL_SWIPE_RIGHT": "向右划项目可修改标签",
"BUTTON_DISPLAY_EXPLAIN": "显示或隐藏行动按键。",
"BUTTON_STYLE_EXPLAIN": "选择行动按键的样式。",
"CAMERA_PERMISSION": "要使用扫描功能,您必须授权「简易QR」使用相机。 ",
@@ -236,10 +253,14 @@
"EMAIL_SUBJECT_MAX_LENGTH": "最多 78 个字元",
"ERROR_CORRECTION_LEVEL_EXPLAIN": "QR 码具有容错能力,即使图形有破损,仍然可以被机器读取内容。
容错率分为四个等级:
L 等级可容错 7% 的字码;
M 等级可容错 15% 的字码;
Q 等级可容错 25% 的字码;
H 等级可容错 30% 的字码。
容错率愈高,QR 码图形面积则愈大。因此,在一般情况下建议使用 M 等级。
",
"EXIT_APP": "确定要离开?
若您喜欢简易QR,欢迎前往商店评分。
",
+ "EXPORT_TO_CSV_EXPLAIN": "您可以将所有扫描记录及书签导出到CSV档案。",
"FAILED_SAVING_CONTACT": "无法新增联络人",
"FAIL_PREPARE_SMS": "无法传送信息",
+ "IMPORT_FAILED": "导入失敗",
+ "IMPORT_FROM_CSV_EXPLAIN": "您可以从简易QR定义的CSV档案导入记录和书签。若您想在Android和iOS设备之间传输数据,请使用此功能。",
"INPUT_TAG": "请为此书签输入一个标签",
"INVALID_BK_FILE": "这不是有效的备份档",
+ "INVALID_CSV_FILE": "这不是有效的CSV档",
"NOT_BASE64_DE": "内容不能被 Base64 解码",
"NOT_BASE64_EN": "内容不能被 Base64 编码",
"NOT_BASE64_EN_DE": "内容不能被 Base64 编码及解码",
@@ -265,7 +286,7 @@
"SAVED_CONTACT": "已新增联络人",
"SAVING_CONTACT": "正在新增联络人",
"SCAN_QR_FROM_IMAGE": "简易 QR 使用「cozmo/jsQR」模组扫描图片里 QR 码。请注意,",
- "SCAN_QR_FROM_IMAGE_R1": "汇入图片时您必须授权程序存取储存空间或相簿。",
+ "SCAN_QR_FROM_IMAGE_R1": "导入图片时您必须授权程序存取储存空间或相簿。",
"SCAN_QR_FROM_IMAGE_R2": "请确保所选择的图片并非透明背景。建议选择非相机摄取的图片。",
"SCAN_QR_FROM_IMAGE_R3": "若要扫描整张图片,请取消或略过相片编辑步骤。(如适用)",
"SEARCH": "您想搜索哪一个内容?",
@@ -279,7 +300,7 @@
"TAG_MAX_LENGTH_EXPLAIN": "标签长度不能多于 30 个字元。",
"TUTORIAL_NOT_SHOW_AGAIN": "下次不再提醒",
"TUTORIAL_SWIPE_LEFT": "向左划项目可删除相关记录",
- "TUTORIAL_SWIPE_RIGHT": "向右划项目可将相关记录的文字加入书签",
+ "TUTORIAL_SWIPE_RIGHT": "向右划项目可将相关记录的文字加入书签 / 修改标签",
"UNDO_DELETE": "您可在数秒内复原记录",
"VIBRATION_EXPLAIN": "提供震动或触感反馈。请注意,并非所有设备皆支援此功能。"
},
@@ -295,7 +316,7 @@
"UPC": "通用产品代码"
},
"UPDATE": {
- "UPDATE_NOTES_ANDROID": "此版本为您带来多项更新和新功能,详情请查看 GitHub。
Android 用户现在可以在快速设定面板中加入简易 QR 按键以进行快速启动。
",
- "UPDATE_NOTES_IOS": "此版本为您带来多项更新和新功能,详情请查看 GitHub。"
+ "UPDATE_NOTES_ANDROID": "此版本为您带来多项更新和新功能,详情请查看 GitHub。
",
+ "UPDATE_NOTES_IOS": "此版本为您带来多项更新和新功能,详情请查看 GitHub。
"
}
}
\ No newline at end of file
diff --git a/src/assets/i18n/zh-HK.json b/src/assets/i18n/zh-HK.json
index 9c29b10..f741259 100644
--- a/src/assets/i18n/zh-HK.json
+++ b/src/assets/i18n/zh-HK.json
@@ -21,6 +21,7 @@
"AUTO_KILL_BACKGROUND": "自動停止背景執行",
"AUTO_LOGGING": "自動記錄",
"AUTO_MAX_BRIGHTNESS": "自動最大亮度",
+ "AUTO_OPEN_URL": "自動打開網址",
"AUTO_QR_CODE_POPUP": "自動彈出 QR 碼",
"BACKGROUND_COLOR": "背景顏色",
"BACKING_UP": "備份中",
@@ -34,6 +35,7 @@
"BOOKMARKED": "已書籤",
"BOOKMARKED_TEXTS": "已收藏的書籤會在這裡顯示",
"BOOKMARKS": "書籤",
+ "BRAVE_SEARCH": "Brave Search",
"BROWSE": "瀏覽",
"BROWSER": "瀏覽器",
"BROWSE_WEBSITE": "瀏覽網站",
@@ -45,6 +47,7 @@
"CLOSE": "關閉",
"COLOR": "顏色",
"COLOR_THEME": "顏色主題",
+ "COMING_SOON": "即將推出",
"CONTACT_METHOD": "聯絡方法",
"CONTACT_NAME": "聯絡人名稱",
"CONTENT": "内容",
@@ -65,6 +68,7 @@
"DETAILED": "詳細說明",
"DONE": "完成",
"DUCK_DUCK_GO": "DuckDuckGo",
+ "ECOSIA": "Ecosia",
"EDIT": "修改",
"EMAIL_ADDRESS": "電郵地址",
"EMAIL_BODY": "電郵內容",
@@ -77,6 +81,9 @@
"ERROR_CORRECTION_LEVEL": "容錯等級",
"EXIT": "離開",
"EXIT_APP": "離開程式",
+ "EXPORT": "匯出",
+ "EXPORTING": "匯出中",
+ "EXPORT_TO_CSV": "匯出至CSV",
"FAX_NUMBER": "傳真號碼",
"FEMALE": "女性",
"FIRST_NAME": "名字",
@@ -85,6 +92,7 @@
"FULL_RESET": "完整重設",
"FUNCTIONS": "功能",
"GENDER": "性別",
+ "GEOLOCATION": "地理位置",
"GOOGLE_SEARCH": "Google 搜尋",
"HAPTIC_FEEDBACK_ONLY": "僅觸感反饋",
"HIDDEN_NETWORK_?": "隱藏的網絡?",
@@ -92,11 +100,13 @@
"HOME_PHONE_NUMBER": "家居電話號碼",
"ICON_ONLY": "僅限圖示",
"IMPORT": "匯入",
+ "IMPORT_FROM_CSV": "從CSV匯入",
"IMPORT_IMAGE": "匯入圖片",
"INITIAL_SEGMENT": "起始分頁",
"JOB_TITLE": "職位名稱",
"LANGUAGE": "語言",
"LAST_NAME": "姓氏",
+ "LATITUDE": "緯度",
"LEVEL_H": "H 等級",
"LEVEL_L": "L 等級",
"LEVEL_M": "M 等級",
@@ -107,12 +117,15 @@
"LOCK_PORTRAIT": "鎖定縱向",
"LOG": "記錄",
"LOG_BACKUP_AND_RESTORE": "記錄、備份與還原",
+ "LONGITUDE": "經度",
"MALE": "男性",
+ "MANAGE_RECORDS": "管理記錄",
"MARGIN": "邊距",
"MESSAGE": "信息",
"MESSAGE_CONTENT": "信息內容",
"MICROSOFT_BING": "Microsoft Bing",
"MOBILE_PHONE_NUMBER": "手提電話號碼",
+ "MORE": "更多",
"NAME": "姓名",
"NO": "否",
"NONE": "沒有",
@@ -127,6 +140,7 @@
"OPEN": "打開",
"OPEN_URL": "打開網址",
"OPEN_WITH_...": "用以下方式打開",
+ "OPTIMIZING_DATA_...": "最佳化數據...",
"ORGANIZATION": "組織",
"ORIGINAL": "原始",
"OTHERS": "其他",
@@ -156,6 +170,8 @@
"RESET_DEFAULT": "還原預設值",
"RESTORE": "還原",
"RESULT": "結果",
+ "SAVE": "儲存",
+ "SAVED": "已儲存",
"SCAN": "掃描",
"SCANNED": "掃描",
"SCANNING_FEEDBACK_ONLY": "僅掃描反饋",
@@ -200,6 +216,7 @@
"VIEW_GITHUB": "查看 GitHub",
"VIEW_LOG": "查看記錄",
"VIEW_STORE_AND_SOURCE_CODE": "查看商店及源代碼",
+ "VIEW_INSTRUCTIONS": "查看說明",
"WEBSITE": "網站",
"WIFI": "WiFi",
"WIFI_ENCRYPTION": "安全性",
@@ -214,6 +231,7 @@
"AUTO_KILL_BACKGROUND_EXPLAIN": "為節省系統資源及減低耗電,當程式進入背景執行時,設定自動停止執行程式及所有背景活動的時間。
若選擇由系統控制,程式本身將不會干預其運作及資源佔用,全由系統控制。
請注意,在某些情況下系統可能會提前停止程式的背景運作。
",
"AUTO_LOGGING_EXPLAIN": "在您掃描、建立或查看記錄時,條碼內容會自動被記錄並儲存在本地儲存空間。您可在「記錄」頁面瀏覽所有記錄。",
"AUTO_MAX_BRIGHTNESS_EXPLAIN": "當顯示 QR 碼時,自動調校螢幕亮度到最大。",
+ "AUTO_OPEN_URL_EXPLAIN": "掃描QR碼且內容為URL時,會自動打開該URL。",
"AUTO_SHOW_QR_EXPLAIN": "在進行以下已選擇的動作後,自動彈出 QR 碼。",
"BACKUP_EXPLAIN": "您可以為現有的掃描記錄及書籤進行本地備份。備份後,您會得到一組密碼。請妥善保存密碼,否則您無法還原此備份。請注意,簡易QR並不支援跨平台備份與還原。",
"BACKUP_FAILED": "備份失敗",
@@ -221,7 +239,6 @@
"BACKUP_SUCCESSFULLY": "成功備份。請妥善保存備份檔及以下密碼
{secret}
",
"BARCODE_TYPE": "掃描- QR 碼
- 一維條碼
- Aztec 碼
- 數據矩陣碼
- PDF417 條碼
匯入圖片建立",
"BOOKMARKED": "成功加入書籤",
- "BOOKMARK_TUTORIAL_SWIPE_RIGHT": "向右劃項目可修改標籤",
"BUTTON_DISPLAY_EXPLAIN": "顯示或隱藏行動按鍵。",
"BUTTON_STYLE_EXPLAIN": "選擇行動按鍵的樣式。",
"CAMERA_PERMISSION": "要使用掃描功能,您必須授權「簡易QR」使用相機。",
@@ -236,10 +253,14 @@
"EMAIL_SUBJECT_MAX_LENGTH": "最多 78 個字元",
"ERROR_CORRECTION_LEVEL_EXPLAIN": "QR 碼具有容錯能力,即使圖形有破損,仍然可以被機器讀取內容。
容錯率分為四個等級:
L 等級可容錯 7% 的字碼;
M 等級可容錯 15% 的字碼;
Q 等級可容錯 25% 的字碼;
H 等級可容錯 30% 的字碼。
容錯率愈高,QR 碼圖形面積則愈大。因此,在一般情況下建議使用 M 等級。
",
"EXIT_APP": "確定要離開?
若您喜歡簡易QR,歡迎前往商店評分。
",
+ "EXPORT_TO_CSV_EXPLAIN": "您可以將所有掃描記錄及書籤匯出至CSV檔案。",
"FAILED_SAVING_CONTACT": "無法新增聯絡人",
"FAIL_PREPARE_SMS": "無法傳送信息",
+ "IMPORT_FAILED": "匯入失敗",
+ "IMPORT_FROM_CSV_EXPLAIN": "您可以從簡易QR定義的CSV檔案匯入記錄和書籤。若您想在Android和iOS設備之間傳輸數據,請使用此功能。",
"INPUT_TAG": "請為此書籤輸入一個標籤",
"INVALID_BK_FILE": "這不是有效的備份檔",
+ "INVALID_CSV_FILE": "這不是有效的CSV檔",
"NOT_BASE64_DE": "內容不能被 Base64 解碼",
"NOT_BASE64_EN": "內容不能被 Base64 編碼",
"NOT_BASE64_EN_DE": "內容不能被 Base64 編碼及解碼",
@@ -279,7 +300,7 @@
"TAG_MAX_LENGTH_EXPLAIN": "標籤長度不能多於 30 個字元。",
"TUTORIAL_NOT_SHOW_AGAIN": "下次不再提醒",
"TUTORIAL_SWIPE_LEFT": "向左劃項目可刪除相關記錄",
- "TUTORIAL_SWIPE_RIGHT": "向右劃項目可將相關記錄的文字加入書籤",
+ "TUTORIAL_SWIPE_RIGHT": "向右劃項目可將相關記錄的文字加入書籤 / 修改標籤",
"UNDO_DELETE": "您可在數秒內還原記錄",
"VIBRATION_EXPLAIN": "提供震動或觸感反饋。請注意,並非所有設備皆支援此功能。"
},
@@ -295,7 +316,7 @@
"UPC": "通用產品代碼"
},
"UPDATE": {
- "UPDATE_NOTES_ANDROID": "此版本為您帶來多項更新和新功能,詳情請查看 GitHub。
Android 用戶現在可以在快速設定面板中加入簡易 QR 按鍵以進行快速啟動。
",
- "UPDATE_NOTES_IOS": "此版本為您帶來多項更新和新功能,詳情請查看 GitHub。"
+ "UPDATE_NOTES_ANDROID": "此版本為您帶來多項更新和新功能,詳情請查看 GitHub。
",
+ "UPDATE_NOTES_IOS": "此版本為您帶來多項更新和新功能,詳情請查看 GitHub。
"
}
}
\ No newline at end of file
diff --git a/src/assets/icon/brave-search.svg b/src/assets/icon/brave-search.svg
new file mode 100644
index 0000000..9edb6fd
--- /dev/null
+++ b/src/assets/icon/brave-search.svg
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/src/assets/icon/duck-duck-go.svg b/src/assets/icon/duck-duck-go.svg
index 5fa4b67..eb17b25 100644
--- a/src/assets/icon/duck-duck-go.svg
+++ b/src/assets/icon/duck-duck-go.svg
@@ -1,5 +1,4 @@
-
\ No newline at end of file
diff --git a/src/assets/icon/ecosia.svg b/src/assets/icon/ecosia.svg
new file mode 100644
index 0000000..d76bc36
--- /dev/null
+++ b/src/assets/icon/ecosia.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/src/assets/img/guide-frame.svg b/src/assets/img/guide-frame.svg
index c8c1564..f636c2d 100644
--- a/src/assets/img/guide-frame.svg
+++ b/src/assets/img/guide-frame.svg
@@ -4,7 +4,7 @@
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 271 236" style="enable-background: new 0 0 271 236;">
diff --git a/src/global.scss b/src/global.scss
index e755143..d7b5b44 100644
--- a/src/global.scss
+++ b/src/global.scss
@@ -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;
}
@@ -124,4 +133,9 @@ ion-tab-button:not(.tab-selected)::part(native):hover {
.pre-line {
white-space: pre-line !important;
+}
+
+.mat-icon {
+ height: 28px !important;
+ width: 28px !important;
}
\ No newline at end of file
diff --git a/src/test.ts b/src/test.ts
index 4bf4afb..ae25f27 100644
--- a/src/test.ts
+++ b/src/test.ts
@@ -7,13 +7,6 @@ import {
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
-declare const require: {
- context(path: string, deep?: boolean, filter?: RegExp): {
- keys(): string[];
- (id: string): T;
- };
-};
-
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
@@ -21,7 +14,3 @@ getTestBed().initTestEnvironment(
teardown: { destroyAfterEach: false }
}
);
-// Then we find all the tests.
-const context = require.context('./', true, /\.spec\.ts$/);
-// And load the modules.
-context.keys().map(context);
diff --git a/src/theme/variables.scss b/src/theme/variables.scss
index 3449886..559f75f 100644
--- a/src/theme/variables.scss
+++ b/src/theme/variables.scss
@@ -1,6 +1,17 @@
@use "@angular/material" as mat;
@import "@angular/material/theming";
+// TODO(v15): As of v15 mat.legacy-core no longer includes default typography styles.
+// The following line adds:
+// 1. Default typography styles for all components
+// 2. Styles for typography hierarchy classes (e.g. .mat-headline-1)
+// If you specify typography styles for the components you use elsewhere, you should delete this line.
+// If you don't need the default component typographies but still want the hierarchy styles,
+// you can delete this line and instead use:
+// `@include mat.legacy-typography-hierarchy(mat.define-legacy-typography-config());`
+@include mat.legacy-typography-hierarchy(mat.define-legacy-typography-config());
+@include mat.legacy-core();
@include mat.core();
+
$app-primary: mat.define-palette(mat.$cyan-palette, 600);
$app-warn: mat.define-palette(mat.$red-palette);
$app-light-theme: mat.define-light-theme(
@@ -27,7 +38,7 @@ $app-black-theme: mat.define-dark-theme(
primary: $app-primary,
accent: $app-primary,
warn: $app-warn,
- ),
+ )
)
);
@@ -41,24 +52,27 @@ $app-black-theme: mat.define-dark-theme(
.ng-mat-black {
@include mat.all-component-themes($app-black-theme);
+ .mdc-menu-surface {
+ background-color: #0f0f0f !important;
+ }
}
:root {
/** primary **/
- --ion-color-primary: #00acc1;
+ --ion-color-primary: #00a5aa;
--ion-color-primary-rgb: 0, 172, 193;
--ion-color-primary-contrast: #ffffff;
--ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #00acc1;
- --ion-color-primary-tint: #00acc1;
+ --ion-color-primary-shade: #00a5aa;
+ --ion-color-primary-tint: #00a5aa;
/** secondary **/
- --ion-color-secondary: #00acc1;
+ --ion-color-secondary: #00a5aa;
--ion-color-secondary-rgb: 0, 172, 193;
--ion-color-secondary-contrast: #ffffff;
--ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #00acc1;
- --ion-color-secondary-tint: #00acc1;
+ --ion-color-secondary-shade: #00a5aa;
+ --ion-color-secondary-tint: #00a5aa;
/** tertiary **/
--ion-color-tertiary: #5260ff;
@@ -214,12 +228,12 @@ $app-black-theme: mat.define-dark-theme(
}
body.dark {
- --ion-color-primary: #00acc1;
+ --ion-color-primary: #00a5aa;
--ion-color-primary-rgb: 0, 172, 193;
--ion-color-primary-contrast: #ffffff;
--ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #00acc1;
- --ion-color-primary-tint: #00acc1;
+ --ion-color-primary-shade: #00a5aa;
+ --ion-color-primary-tint: #00a5aa;
/** secondary **/
--ion-color-secondary: #1b89cd;
@@ -715,4 +729,4 @@ body {
}
/* Importing Bootstrap SCSS file. */
-@import "~bootstrap/scss/bootstrap";
+@import "bootstrap/scss/bootstrap";
diff --git a/tsconfig.json b/tsconfig.json
index e8aced8..77028e5 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -10,9 +10,13 @@
"experimentalDecorators": true,
"moduleResolution": "node",
"importHelpers": true,
- "target": "es2020",
+ "target": "ES2022",
"module": "es2020",
- "lib": ["es2018", "dom"]
+ "lib": [
+ "es2018",
+ "dom"
+ ],
+ "useDefineForClassFields": false
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,