Compare commits

..

2 Commits

Author SHA1 Message Date
Sylvia van Os
83becf707a Replace contributors with link 2024-01-11 22:15:18 +01:00
Sylvia van Os
287f72f7d7 Support HTML in credits screen 2024-01-11 15:26:07 +01:00
657 changed files with 1914 additions and 6117 deletions

View File

@@ -28,14 +28,11 @@ env:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
api-level: [ 21, 34 ]
steps:
- uses: actions/checkout@v4.2.2
- uses: actions/checkout@v4.1.1
- name: Fail on bad translations
run: if grep -ri "<xliff" app/src/main/res/values*/strings.xml; then echo "Invalidly escaped translations found"; exit 1; fi
- uses: gradle/actions/wrapper-validation@v4
- uses: gradle/wrapper-validation-action@v1
- name: set up OpenJDK 17
run: |
sudo apt-get update
@@ -47,22 +44,11 @@ jobs:
run: ./gradlew lintRelease
- name: Run unit tests
run: timeout 5m ./gradlew testReleaseUnitTest || { ./gradlew --stop && timeout 5m ./gradlew testReleaseUnitTest; }
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Run instrumented tests
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.api-level }}
arch: x86_64
script: ./gradlew connectedCheck
- name: SpotBugs
run: ./gradlew spotbugsRelease
- name: Archive test results
if: always()
uses: actions/upload-artifact@v4.4.3
uses: actions/upload-artifact@v4.0.0
with:
name: test-results-api${{ matrix.api-level }}
name: test-results
path: app/build/reports

View File

@@ -27,15 +27,15 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v4.1.1
- name: Setup Python
uses: actions/setup-python@v5.3.0
uses: actions/setup-python@v5.0.0
with:
python-version: '3.x'
- name: Run converter script
run: python .scripts/changelog_to_fastlane.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.5
uses: peter-evans/create-pull-request@v5.0.2
with:
title: "Update Fastlane changelogs"
commit-message: "Update Fastlane changelogs"

View File

@@ -1,40 +0,0 @@
name: Write contributors to file
on:
workflow_dispatch:
schedule:
- cron: '3 4 * * 0'
permissions:
actions: none
checks: none
contents: write
deployments: none
discussions: none
id-token: none
issues: none
packages: none
pages: none
pull-requests: write
repository-projects: none
security-events: none
statuses: none
jobs:
contributors_to_file:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
name: Write contributors to file
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v4.2.2
- name: Update contributors
id: update_contributors
uses: TheLastProject/contributors-to-file-action@v3.2.0
with:
file_in_repo: app/src/main/res/raw/contributors.txt
min_commit_count: 5
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.5
with:
title: "Update contributors"
commit-message: "Update contributors"
branch-suffix: timestamp

View File

@@ -6,7 +6,6 @@ on:
- main
paths:
- 'fastlane/**/title.txt'
- '.scripts/generate_feature_graphic/**'
permissions:
actions: none
checks: none
@@ -25,7 +24,7 @@ jobs:
generate-feature-graphic:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: actions/checkout@v4.1.1
- name: Install requirements
run: |
sudo apt-get update
@@ -39,7 +38,7 @@ jobs:
- name: Generate featureGraphic.png for each language
run: .scripts/generate_feature_graphic/generate_feature_graphic.sh
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.5
uses: peter-evans/create-pull-request@v5.0.2
with:
title: "Update feature graphic"
commit-message: "Update feature graphic"

View File

@@ -21,12 +21,12 @@ jobs:
gradle-update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: obfusk/gradle-update-action@v3.0.0
- uses: actions/checkout@v4.1.1
- uses: obfusk/gradle-update-action@v2.0.0
id: gradle-update
- uses: gradle/actions/wrapper-validation@v4
- uses: gradle/wrapper-validation-action@v1
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.5
uses: peter-evans/create-pull-request@v5.0.2
with:
title: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
commit-message: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"

View File

@@ -25,13 +25,13 @@ jobs:
update-locales:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: actions/checkout@v4.1.1
- name: Add new locales
run: .scripts/new-locales.py
- name: Update locales
run: .scripts/locales.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.5
uses: peter-evans/create-pull-request@v5.0.2
with:
title: "Update locales"
commit-message: "Update locales"

View File

@@ -4,32 +4,20 @@ set -euo pipefail
script_location="$(dirname "$(readlink -f "$0")")"
for lang in "$script_location/../../fastlane/metadata/android/"*; do
# Skip languages without title.txt
if [ ! -f "$lang/title.txt" ]; then
continue
fi
pushd "$lang"
# Place temporary copy for editing if needed
cp "$script_location/featureGraphic.svg" featureGraphic.svg
if grep -q — title.txt; then
# Try splitting title.txt on — (em dash)
IFS='—' read -r appname subtext < title.txt
elif grep -q title.txt; then
# No result, try splitting title.txt on (en dash)
IFS='' read -r appname subtext < title.txt
elif grep -q - title.txt; then
else
# No result, try splitting on - (dash)
IFS='-' read -r appname subtext < title.txt
else
# No result, use the full title as app name and default subtext
appname=$(< title.txt)
subtext="Loyalty Card Wallet"
fi
export appname=${appname%% }
export subtext=${subtext## }
# If the appname isn't Catima or there is subtext, change the .svg accordingly
if [ "$appname" != "Catima" ] || [ -n "$subtext" ]; then
# If there is subtext, change the .svg accordingly
if [ -n "$subtext" ]; then
perl -pi -e 's/Catima/$ENV{appname}/' featureGraphic.svg
perl -pi -e 's/Loyalty Card Wallet/$ENV{subtext}/' featureGraphic.svg
# Set correct font or font size for language if needed
@@ -37,10 +25,9 @@ for lang in "$script_location/../../fastlane/metadata/android/"*; do
# We specifically need the Serif version because of the 200 weight
case "$(basename "$lang")" in
bg|el-GR|ru-RU|uk) sed -i "s/Lexend Deca/Noto Serif/" featureGraphic.svg ;;
hi-IN) sed -i -e "s/Yesteryear/Noto Serif Devanagari/" -e "s/Lexend Deca/Noto Serif Devanagari/" featureGraphic.svg ;;
ja-JP) sed -i "s/Lexend Deca/Noto Serif CJK JP/" featureGraphic.svg ;;
kn-IN) sed -i -e 's/font-size="150"/font-size="100"/' -e "s/Yesteryear/Noto Serif Kannada/" featureGraphic.svg ;;
ko) sed -i "s/Lexend Deca/Noto Serif CJK KR/" featureGraphic.svg ;;
kn-IN) sed -i -e 's/font-size="150"/font-size="100"/' -e 's/y="285.511"/y="235.511"/' featureGraphic.svg ;;
zh-CN) sed -i "s/Lexend Deca/Noto Serif CJK SC/" featureGraphic.svg ;;
zh-TW) sed -i "s/Lexend Deca/Noto Serif CJK TC/" featureGraphic.svg ;;
*) ;;

View File

@@ -24,7 +24,7 @@ sed = [
]
subprocess.run(sed, check=True)
with open("app/src/main/res/xml/locales_config.xml", "w", encoding="utf-8") as fh:
with open("app/src/main/res/xml/locales_config.xml", "w") as fh:
fh.write('<?xml version="1.0" encoding="utf-8"?>\n')
fh.write('<locale-config xmlns:android="http://schemas.android.com/apk/res/android">\n')
fh.write(' <locale android:name="en-US" />\n')

View File

@@ -19,27 +19,15 @@ REPLACE_CODES = {
STATS_URL = "https://hosted.weblate.org/api/components/catima/catima/statistics/"
class Error(Exception):
pass
def get_weblate_langs() -> List[Tuple[str, int]]:
url = STATS_URL
r = requests.get(STATS_URL, timeout=5)
r.raise_for_status()
results = []
for _ in range(16): # avoid endless loops just in case
r = requests.get(url, timeout=5)
r.raise_for_status()
data = r.json()
for lang in data["results"]:
if lang["code"] != "en":
code = REPLACE_CODES.get(lang["code"], lang["code"]).replace("_", "-r")
results.append((code, round(lang["translated_percent"])))
url = data["next"]
if not url:
return sorted(results)
if not url.split("?")[0] == STATS_URL:
raise Error(f"Unexpected next URL: {url}")
raise Error("Too many pages")
for lang in r.json()["results"]:
if lang["code"] != "en":
code = REPLACE_CODES.get(lang["code"], lang["code"]).replace("_", "-r")
results.append((code, round(lang["translated_percent"])))
return sorted(results)
def get_dir_langs() -> List[str]:
@@ -54,7 +42,7 @@ def get_dir_langs() -> List[str]:
def get_xml_langs() -> List[Tuple[str, bool]]:
results = []
in_section = False
with open("app/src/main/res/values/settings.xml", encoding="utf-8") as fh:
with open("app/src/main/res/values/settings.xml") as fh:
for line in fh:
if not in_section and 'name="locale_values"' in line:
in_section = True
@@ -71,7 +59,7 @@ def get_xml_langs() -> List[Tuple[str, bool]]:
def update_xml_langs(langs: List[Tuple[str, bool]]) -> None:
lines: List[str] = []
in_section = False
with open("app/src/main/res/values/settings.xml", encoding="utf-8") as fh:
with open("app/src/main/res/values/settings.xml") as fh:
for line in fh:
if not in_section and 'name="locale_values"' in line:
in_section = True
@@ -82,7 +70,7 @@ def update_xml_langs(langs: List[Tuple[str, bool]]) -> None:
else:
continue
lines.append(line)
with open("app/src/main/res/values/settings.xml", "w", encoding="utf-8") as fh:
with open("app/src/main/res/values/settings.xml", "w") as fh:
for line in lines:
fh.write(line)

View File

@@ -1,51 +1,6 @@
# Changelog
## Unreleased - 140
- Fix text wrapping on add dialog
## v2.32.0 - 139 (2024-10-28)
- Option to navigate cards using the volume buttons
- Fix Stocard import
- Fix "Import cancelled" message appearing after successful import
## v2.31.1 - 138 (2024-08-24)
- Fix back gesture on main screen dismissing keyboard and search on Android 13+
## v2.31.0 - 137 (2024-07-26)
- Allow long store names in preview to split over multiple lines
- Option to use front of back image in thumbnail menu
- Minor import/export fixes
- Minor UI fixes
## v2.30.0 - 136 (2024-06-18)
- Support for creating a card when sharing plain text
- Display image type instead of barcode below images
- Fix possible crash when trying to import a backup from the Nextcloud app
- Improved support for devices without camera
## v2.29.1 - 135 (2024-05-19)
- Various fixes and improvements to balance handling
## v2.29.0 - 134 (2024-04-19)
- Support for scanning PDF files for barcodes
- Support for image files with multiple barcodes
- Minor UI fixes
## v2.28.0 - 133 (2024-03-08)
- Target Android 14
- Open card icon in gallery on touch
- Improve design of Photos tab in edit view
- Update spending screen to also support receiving
## v2.27.0 - 132 (2024-01-30)
## Unreleased - 132
- Refine "Add card" workflow
- Validation flow improvements

View File

@@ -1,32 +1,29 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.7)
base64
nkf
CFPropertyList (3.0.6)
rexml
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
artifactory (3.0.17)
addressable (2.8.5)
public_suffix (>= 2.0.2, < 6.0)
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.3.0)
aws-partitions (1.958.0)
aws-sdk-core (3.201.3)
aws-eventstream (~> 1, >= 1.3.0)
aws-eventstream (1.2.0)
aws-partitions (1.824.0)
aws-sdk-core (3.181.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
aws-sigv4 (~> 1.5)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.88.0)
aws-sdk-core (~> 3, >= 3.201.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.156.0)
aws-sdk-core (~> 3, >= 3.201.0)
aws-sdk-kms (1.71.0)
aws-sdk-core (~> 3, >= 3.177.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.134.0)
aws-sdk-core (~> 3, >= 3.181.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.9.0)
aws-sigv4 (~> 1.6)
aws-sigv4 (1.6.0)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.2.0)
claide (1.1.0)
colored (1.2)
colored2 (3.1.2)
@@ -35,10 +32,11 @@ GEM
declarative (0.0.20)
digest-crc (0.6.5)
rake (>= 12.0.0, < 14.0.0)
domain_name (0.6.20240107)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.111.0)
excon (0.103.0)
faraday (1.10.3)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
@@ -60,22 +58,22 @@ GEM
faraday-httpclient (1.0.1)
faraday-multipart (1.0.4)
multipart-post (~> 2)
faraday-net_http (1.0.2)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.3.1)
fastlane (2.222.0)
fastimage (2.2.7)
fastlane (2.215.1)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
aws-sdk-s3 (~> 1.0)
babosa (>= 1.0.3, < 2.0.0)
bundler (>= 1.12.0, < 3.0.0)
colored (~> 1.2)
colored
commander (~> 4.6)
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (>= 0.1, < 4.0)
@@ -87,7 +85,6 @@ GEM
gh_inspector (>= 1.1.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
google-cloud-env (>= 1.6.0, < 2.0.0)
google-cloud-storage (~> 1.31)
highline (~> 2.0)
http-cookie (~> 1.0.5)
@@ -96,10 +93,10 @@ GEM
mini_magick (>= 4.9.4, < 5.0.0)
multipart-post (>= 2.0.0, < 3.0.0)
naturally (~> 2.2)
optparse (>= 0.1.1, < 1.0.0)
optparse (~> 0.1.1)
plist (>= 3.1.0, < 4.0.0)
rubyzip (>= 2.0.0, < 3.0.0)
security (= 0.1.5)
security (= 0.1.3)
simctl (~> 1.6.3)
terminal-notifier (>= 2.0.0, < 3.0.0)
terminal-table (~> 3)
@@ -108,11 +105,11 @@ GEM
word_wrap (~> 1.0.0)
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
xcpretty-travis-formatter (>= 0.0.3)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.54.0)
google-apis-androidpublisher_v3 (0.49.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.3)
google-apis-core (0.11.1)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
@@ -120,64 +117,62 @@ GEM
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.17.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-playcustomapp_v1 (0.13.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.31.0)
google-apis-core (>= 0.11.0, < 2.a)
google-cloud-core (1.7.0)
google-cloud-env (>= 1.0, < 3.a)
google-apis-storage_v1 (0.19.0)
google-apis-core (>= 0.9.0, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.4.0)
google-cloud-storage (1.47.0)
google-cloud-errors (1.3.1)
google-cloud-storage (1.44.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.31.0)
google-apis-storage_v1 (~> 0.19.0)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
googleauth (1.8.1)
googleauth (1.8.0)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-cookie (1.0.6)
http-cookie (1.0.5)
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.6.2)
json (2.7.2)
jwt (2.8.2)
base64
mini_magick (4.13.2)
json (2.6.3)
jwt (2.7.1)
mini_magick (4.12.0)
mini_mime (1.1.5)
multi_json (1.15.0)
multipart-post (2.4.1)
multipart-post (2.3.0)
nanaimo (0.3.0)
naturally (2.2.1)
nkf (0.2.0)
optparse (0.5.0)
optparse (0.1.1)
os (1.1.4)
plist (3.7.1)
public_suffix (6.0.1)
rake (13.2.1)
plist (3.7.0)
public_suffix (5.0.3)
rake (13.0.6)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rexml (3.2.9)
strscan
rexml (3.2.6)
rouge (2.0.7)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
security (0.1.5)
signet (0.19.0)
security (0.1.3)
signet (0.18.0)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
@@ -185,19 +180,22 @@ GEM
simctl (1.6.10)
CFPropertyList
naturally
strscan (3.1.0)
terminal-notifier (2.0.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
trailblazer-option (0.1.2)
tty-cursor (0.7.1)
tty-screen (0.8.2)
tty-screen (0.8.1)
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
uber (0.1.0)
unicode-display_width (2.5.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8.2)
unicode-display_width (2.4.2)
webrick (1.8.1)
word_wrap (1.0.0)
xcodeproj (1.24.0)
xcodeproj (1.22.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
@@ -216,4 +214,4 @@ DEPENDENCIES
fastlane
BUNDLED WITH
2.5.11
2.3.26

View File

@@ -15,21 +15,19 @@ spotbugs {
android {
namespace = "protect.card_locker"
compileSdk = 34
compileSdk = 33
defaultConfig {
applicationId = "me.hackerchick.catima"
minSdk = 21
targetSdk = 34
versionCode = 139
versionName = "2.32.0"
targetSdk = 33
versionCode = 131
versionName = "2.26.0"
vectorDrawables.useSupportLibrary = true
multiDexEnabled = true
resourceConfigurations += listOf("ar", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "et", "fi", "fr", "he-rIL", "hi", "hr", "hu", "in-rID", "is", "it", "ja", "ko", "lt", "lv", "nb-rNO", "nl", "oc", "pl", "pt-rBR", "pt-rPT", "ro-rRO", "ru", "sk", "sl", "sr", "sv", "tr", "uk", "vi", "zh-rCN", "zh-rTW")
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
resourceConfigurations += listOf("ar", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "fi", "fr", "he-rIL", "hi", "hr", "hu", "in-rID", "is", "it", "ja", "ko", "lt", "lv", "nb-rNO", "nl", "oc", "pl", "pt-rPT", "ro-rRO", "ru", "sk", "sl", "sv", "tr", "uk", "vi", "zh-rCN", "zh-rTW")
}
buildTypes {
@@ -89,21 +87,21 @@ android {
dependencies {
// AndroidX
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.exifinterface:exifinterface:1.3.7")
implementation("androidx.palette:palette:1.0.0")
implementation("androidx.preference:preference:1.2.1")
implementation("com.google.android.material:material:1.12.0")
implementation("com.github.yalantis:ucrop:2.2.9")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.2")
implementation("com.google.android.material:material:1.9.0")
implementation("com.github.yalantis:ucrop:2.2.8")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
// Splash Screen
implementation("androidx.core:core-splashscreen:1.0.1")
// Third-party
implementation("com.journeyapps:zxing-android-embedded:4.3.0@aar")
implementation("com.google.zxing:core:3.5.3")
implementation("com.google.zxing:core:3.5.2")
implementation("org.apache.commons:commons-csv:1.9.0")
implementation("com.jaredrummler:colorpicker:1.1.0")
implementation("net.lingala.zip4j:zip4j:2.11.5")
@@ -112,18 +110,9 @@ dependencies {
implementation("io.wcm.tooling.spotbugs:io.wcm.tooling.spotbugs.annotations:1.0.0")
// Testing
val androidXTestVersion = "1.6.1"
val junitVersion = "4.13.2"
testImplementation("androidx.test:core:$androidXTestVersion")
testImplementation("junit:junit:$junitVersion")
testImplementation("org.robolectric:robolectric:4.13")
androidTestImplementation("androidx.test:core:$androidXTestVersion")
androidTestImplementation("junit:junit:$junitVersion")
androidTestImplementation("androidx.test.ext:junit:1.2.1")
androidTestImplementation("androidx.test:runner:$androidXTestVersion")
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.3.0")
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
testImplementation("androidx.test:core:1.5.0")
testImplementation("junit:junit:4.13.2")
testImplementation("org.robolectric:robolectric:4.11.1")
}
tasks.withType<SpotBugsTask>().configureEach {

View File

@@ -1,67 +0,0 @@
package protect.card_locker;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.typeText;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withChild;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertEquals;
import androidx.appcompat.widget.Toolbar;
import androidx.test.core.app.ActivityScenario;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.uiautomator.UiDevice;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class MainActivitySearchViewTest {
@Test
public void whenSearchViewIsExpandedAndBackIsPressedThenMenuItemShouldNotBeCollapsed() {
String query = "random arbitrary text";
try (ActivityScenario<MainActivity> mainActivityScenario = ActivityScenario.launch(MainActivity.class)) {
mainActivityScenario.onActivity(this::makeSearchMenuItemVisible);
onView(withId(R.id.action_search)).perform(click());
onView(withId(androidx.appcompat.R.id.search_src_text)).perform(typeText(query));
pressBack();
onView(withId(androidx.appcompat.R.id.search_src_text)).check(matches(withText(query)));
mainActivityScenario.onActivity(activity -> assertEquals(query, activity.mFilter));
}
}
@Test
public void whenSearchViewIsExpandedThenItShouldOnlyBeCollapsedWhenBackIsPressedTwice() {
try (ActivityScenario<MainActivity> mainActivityScenario = ActivityScenario.launch(MainActivity.class)) {
mainActivityScenario.onActivity(this::makeSearchMenuItemVisible);
onView(withId(R.id.action_search)).perform(click());
pressBack();
onView(withId(androidx.appcompat.R.id.search_src_text)).check(matches(isDisplayed()));
pressBack();
onView(withId(android.R.id.content)).check(matches(is(not(withChild(withId(androidx.appcompat.R.id.search_src_text))))));
}
}
private void makeSearchMenuItemVisible(MainActivity activity) {
Toolbar toolbar = activity.findViewById(R.id.toolbar);
toolbar.getMenu().findItem(R.id.action_search).setVisible(true);
}
private void pressBack() {
UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()).pressBack();
}
}

View File

@@ -1,4 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">تصحيح Catima</string>
</resources>
<resources></resources>

View File

@@ -1,4 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Catima Debug</string>
</resources>
<resources></resources>

View File

@@ -1,4 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Αποσφαλμάτωση Catima</string>
</resources>
<resources></resources>

View File

@@ -1,4 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Catima Debug</string>
</resources>
<resources></resources>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Catima Debug</string>
</resources>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Depuração do Catima</string>
</resources>

View File

@@ -1,4 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Catima Debug</string>
</resources>
<resources></resources>

View File

@@ -1,4 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Catima 除錯版</string>
</resources>
<resources></resources>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Catima Debug</string>
</resources>

View File

@@ -16,7 +16,7 @@
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
android:required="true" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
@@ -43,9 +43,7 @@
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
<data android:mimeType="image/*" />
<data android:mimeType="application/pdf" />
</intent-filter>
</activity>
<activity
@@ -113,12 +111,10 @@
android:name=".preferences.SettingsActivity"
android:label="@string/settings"
android:theme="@style/AppTheme.NoActionBar" />
<!-- FIXME: locked screenOrientation is a workaround for https://github.com/CatimaLoyalty/Android/issues/1715, remove when https://github.com/CatimaLoyalty/Android/issues/513 is fixed -->
<activity
android:name=".ImportExportActivity"
android:label="@string/importExport"
android:exported="true"
android:screenOrientation="locked"
android:theme="@style/AppTheme.NoActionBar">
<!-- ZIP Intent Filter -->
@@ -183,8 +179,7 @@
android:resource="@xml/file_provider_paths" />
</provider>
<service android:name=".CardsOnPowerScreenService" android:label="@string/app_name"
android:permission="android.permission.BIND_CONTROLS" android:exported="true"
tools:targetApi="r">
android:permission="android.permission.BIND_CONTROLS" android:exported="true">
<intent-filter>
<action android:name="android.service.controls.ControlsProviderService" />
</intent-filter>

View File

@@ -12,6 +12,7 @@ import androidx.annotation.StringRes;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import protect.card_locker.databinding.AboutActivityBinding;
public class AboutActivity extends CatimaAppCompatActivity {

View File

@@ -135,7 +135,7 @@ public class AboutContent {
contributorInfo.append("<br/><br/>");
contributorInfo.append(context.getString(R.string.app_copyright_old));
contributorInfo.append("<br/><br/>");
contributorInfo.append(String.format(context.getString(R.string.app_contributors), getContributors()));
contributorInfo.append("<a href='https://catima.app/contribute/#existing-contributors'>").append(context.getString(R.string.view_more_contributors)).append("</a>");
contributorInfo.append("<br/><br/>");
contributorInfo.append(String.format(context.getString(R.string.app_libraries), getThirdPartyLibraries()));
contributorInfo.append("<br/><br/>");

View File

@@ -12,12 +12,12 @@ import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.widget.Toolbar;
import com.google.zxing.BarcodeFormat;
import java.util.ArrayList;
import androidx.appcompat.widget.Toolbar;
import protect.card_locker.databinding.BarcodeSelectorActivityBinding;
/**
@@ -71,7 +71,7 @@ public class BarcodeSelectorActivity extends CatimaAppCompatActivity implements
});
final Bundle b = getIntent().getExtras();
final String initialCardId = b != null ? b.getString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID) : null;
final String initialCardId = b != null ? b.getString("initialCardId") : null;
if (initialCardId != null) {
cardId.setText(initialCardId);

View File

@@ -1,23 +1,15 @@
package protect.card_locker;
import androidx.annotation.Nullable;
public class BarcodeValues {
@Nullable
private final CatimaBarcode mFormat;
private final String mFormat;
private final String mContent;
private String mNote;
public BarcodeValues(@Nullable CatimaBarcode format, String content) {
public BarcodeValues(String format, String content) {
mFormat = format;
mContent = content;
}
public void setNote(String note) {
mNote = note;
}
public @Nullable CatimaBarcode format() {
public String format() {
return mFormat;
}
@@ -25,5 +17,7 @@ public class BarcodeValues {
return mContent;
}
public String note() { return mNote; }
}
public boolean isEmpty() {
return mFormat == null && mContent == null;
}
}

View File

@@ -1,6 +0,0 @@
package protect.card_locker;
public interface BarcodeValuesListDisambiguatorCallback {
void onUserChoseBarcode(BarcodeValues barcodeValues);
void onUserDismissedSelector();
}

View File

@@ -61,7 +61,7 @@ public class CardShortcutConfigure extends CatimaAppCompatActivity implements Lo
private void onClickAction(int position) {
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
selected.moveToPosition(position);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(selected);
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(selected);
Log.d(TAG, "Creating shortcut for card " + loyaltyCard.store + "," + loyaltyCard.id);

View File

@@ -15,13 +15,13 @@ import android.service.controls.actions.ControlAction;
import android.service.controls.templates.StatelessTemplate;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import java.util.List;
import java.util.concurrent.Flow;
import java.util.function.Consumer;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
@RequiresApi(Build.VERSION_CODES.R)
public class CardsOnPowerScreenService extends ControlsProviderService {
@@ -42,10 +42,10 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived);
return subscriber -> {
while (loyaltyCardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(loyaltyCardCursor);
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(loyaltyCardCursor);
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(LoyaltyCardViewActivity.BUNDLE_ID, card.id);
.putExtra("id", card.id);
PendingIntent pendingIntent = PendingIntent.getActivity(getBaseContext(), card.id, openIntent, PendingIntent.FLAG_IMMUTABLE);
subscriber.onNext(
new Control.StatelessBuilder(PREFIX + card.id, pendingIntent)
@@ -73,7 +73,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
if (card != null) {
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(LoyaltyCardViewActivity.BUNDLE_ID, card.id);
.putExtra("id", card.id);
PendingIntent pendingIntent = PendingIntent.getActivity(getBaseContext(), card.id, openIntent, PendingIntent.FLAG_IMMUTABLE);
control = new Control.StatefulBuilder(controlId, pendingIntent)
.setTitle(card.store)
@@ -129,7 +129,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
consumer.accept(ControlAction.RESPONSE_OK);
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(LoyaltyCardViewActivity.BUNDLE_ID, controlIdToCardId(controlId));
.putExtra("id", controlIdToCardId(controlId));
startActivity(openIntent);
closePowerScreenOnAndroid11();

View File

@@ -14,8 +14,6 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.WindowInsetsControllerCompat;
public class CatimaAppCompatActivity extends AppCompatActivity {
protected boolean activityOverridesNavBarColor = false;
@Override
protected void attachBaseContext(Context base) {
// Apply chosen language
@@ -50,14 +48,6 @@ public class CatimaAppCompatActivity extends AppCompatActivity {
Utils.postPatchColors(this);
}
@Override
protected void onResume() {
super.onResume();
if (!activityOverridesNavBarColor) {
Utils.setNavigationBarColor(this, null, Utils.resolveBackgroundColor(this), !Utils.isDarkModeEnabled(this));
}
}
protected void enableToolbarBackButton() {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {

View File

@@ -1,7 +1,5 @@
package protect.card_locker;
import androidx.annotation.NonNull;
import com.google.zxing.BarcodeFormat;
import java.util.Arrays;
@@ -47,15 +45,15 @@ public class CatimaBarcode {
mBarcodeFormat = barcodeFormat;
}
public static CatimaBarcode fromBarcode(@NonNull BarcodeFormat barcodeFormat) {
public static CatimaBarcode fromBarcode(BarcodeFormat barcodeFormat) {
return new CatimaBarcode(barcodeFormat);
}
public static CatimaBarcode fromName(@NonNull String name) {
public static CatimaBarcode fromName(String name) {
return new CatimaBarcode(BarcodeFormat.valueOf(name));
}
public static CatimaBarcode fromPrettyName(@NonNull String prettyName) {
public static CatimaBarcode fromPrettyName(String prettyName) {
try {
return new CatimaBarcode(barcodeFormats.get(barcodePrettyNames.indexOf(prettyName)));
} catch (IndexOutOfBoundsException e) {

View File

@@ -4,24 +4,22 @@ import android.app.Activity;
import android.content.Context;
import android.widget.Toast;
import androidx.core.util.Consumer;
import com.journeyapps.barcodescanner.CaptureManager;
import com.journeyapps.barcodescanner.DecoratedBarcodeView;
public class CatimaCaptureManager extends CaptureManager {
private final Consumer<String> mErrorCallback;
private final Context mContext;
public CatimaCaptureManager(Activity activity, DecoratedBarcodeView barcodeView, Consumer<String> errorCallback) {
public CatimaCaptureManager(Activity activity, DecoratedBarcodeView barcodeView) {
super(activity, barcodeView);
mErrorCallback = errorCallback;
mContext = activity.getApplicationContext();
}
@Override
protected void displayFrameworkBugMessageAndExit(String message) {
// We don't want to exit, as we also have a enter from card image and add manually button here
// So, instead, we call our error callback
mErrorCallback.accept(message);
// So we show a toast instead
Toast.makeText(mContext, message, Toast.LENGTH_LONG).show();
}
}

View File

@@ -332,7 +332,7 @@ public class DBHelper extends SQLiteOpenHelper {
Set<String> files = new HashSet<>();
Cursor cardCursor = getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor);
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
String name = Utils.getCardImageFileName(card.id, imageLocationType);
if (Utils.retrieveCardImageAsFile(context, name).exists()) {
@@ -542,7 +542,7 @@ public class DBHelper extends SQLiteOpenHelper {
if (data.getCount() == 1) {
data.moveToFirst();
card = LoyaltyCard.fromCursor(data);
card = LoyaltyCard.toLoyaltyCard(data);
}
data.close();

View File

@@ -8,12 +8,14 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import protect.card_locker.databinding.GroupLayoutBinding;
import protect.card_locker.preferences.Settings;
public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.GroupListItemViewHolder> {
public final Context mContext;

View File

@@ -1,36 +1,38 @@
package protect.card_locker;
import android.Manifest;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.text.InputType;
import android.util.Log;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textfield.TextInputLayout;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import protect.card_locker.async.TaskHandler;
import protect.card_locker.databinding.ImportExportActivityBinding;
import protect.card_locker.importexport.DataFormat;
@@ -81,21 +83,15 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
Log.e(TAG, "Activity returned NULL uri");
return;
}
// Running this in a thread prevents Android from throwing a NetworkOnMainThreadException for large files
// FIXME: This is still suboptimal, because showing that the export started is delayed until the network request finishes
new Thread() {
@Override
public void run() {
try {
OutputStream writer = getContentResolver().openOutputStream(uri);
Log.d(TAG, "Starting file export with: " + result);
startExport(writer, uri, exportPassword.toCharArray(), true);
} catch (IOException e) {
Log.e(TAG, "Failed to export file: " + result, e);
onExportComplete(new ImportExportResult(ImportExportResultType.GenericFailure, result.toString()), uri);
}
}
}.start();
try {
OutputStream writer = getContentResolver().openOutputStream(uri);
Log.e(TAG, "Starting file export with: " + result.toString());
startExport(writer, uri, exportPassword.toCharArray(), true);
} catch (IOException e) {
Log.e(TAG, "Failed to export file: " + result.toString(), e);
onExportComplete(new ImportExportResult(ImportExportResultType.GenericFailure, result.toString()), uri);
}
});
fileOpenLauncher = registerForActivityResult(new ActivityResultContracts.GetContent(), result -> {
if (result == null) {
@@ -130,19 +126,16 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
builder.setTitle(R.string.exportPassword);
FrameLayout container = new FrameLayout(ImportExportActivity.this);
final TextInputLayout textInputLayout = new TextInputLayout(ImportExportActivity.this);
textInputLayout.setEndIconMode(TextInputLayout.END_ICON_PASSWORD_TOGGLE);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(50, 10, 50, 0);
textInputLayout.setLayoutParams(params);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.leftMargin = 50;
params.rightMargin = 50;
final EditText input = new EditText(ImportExportActivity.this);
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
input.setLayoutParams(params);
input.setHint(R.string.exportPasswordHint);
textInputLayout.addView(input);
container.addView(textInputLayout);
container.addView(input);
builder.setView(container);
builder.setPositiveButton(R.string.ok, (dialogInterface, i) -> {
exportPassword = input.getText().toString();
@@ -155,6 +148,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
});
builder.setNegativeButton(R.string.cancel, (dialogInterface, i) -> dialogInterface.cancel());
builder.show();
});
// Check that there is a file manager available
@@ -164,28 +158,17 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
// Check that there is an app that data can be imported from
Button importApplication = binding.importOptionApplicationButton;
importApplication.setOnClickListener(v -> chooseImportType(true, null));
// FIXME: The importer/exporter is currently quite broken
// To prevent the screen from turning off during import/export and some devices killing Catima as it's no longer foregrounded, force the screen to stay on here
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
private void openFileForImport(Uri uri, char[] password) {
// Running this in a thread prevents Android from throwing a NetworkOnMainThreadException for large files
// FIXME: This is still suboptimal, because showing that the import started is delayed until the network request finishes
new Thread() {
@Override
public void run() {
try {
InputStream reader = getContentResolver().openInputStream(uri);
Log.d(TAG, "Starting file import with: " + uri);
startImport(reader, uri, importDataFormat, password, true);
} catch (IOException e) {
Log.e(TAG, "Failed to import file: " + uri, e);
onImportComplete(new ImportExportResult(ImportExportResultType.GenericFailure, e.toString()), uri, importDataFormat);
}
}
}.start();
try {
InputStream reader = getContentResolver().openInputStream(uri);
Log.e(TAG, "Starting file import with: " + uri.toString());
startImport(reader, uri, importDataFormat, password, true);
} catch (IOException e) {
Log.e(TAG, "Failed to import file: " + uri.toString(), e);
onImportComplete(new ImportExportResult(ImportExportResultType.GenericFailure, e.toString()), uri, importDataFormat);
}
}
private void chooseImportType(boolean choosePicker,
@@ -337,21 +320,9 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
AlertDialog.Builder builder = new MaterialAlertDialogBuilder(this);
builder.setTitle(R.string.passwordRequired);
FrameLayout container = new FrameLayout(ImportExportActivity.this);
final TextInputLayout textInputLayout = new TextInputLayout(ImportExportActivity.this);
textInputLayout.setEndIconMode(TextInputLayout.END_ICON_PASSWORD_TOGGLE);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(50, 10, 50, 0);
textInputLayout.setLayoutParams(params);
final EditText input = new EditText(ImportExportActivity.this);
final EditText input = new EditText(this);
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
input.setHint(R.string.exportPasswordHint);
textInputLayout.addView(input);
container.addView(textInputLayout);
builder.setView(container);
builder.setView(input);
builder.setPositiveButton(R.string.ok, (dialogInterface, i) -> {
openFileForImport(uri, input.getText().toString().toCharArray());

View File

@@ -6,7 +6,6 @@ import android.content.Context;
import android.content.DialogInterface;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
@@ -91,16 +90,16 @@ public class ImportExportTask implements CompatCallable<ImportExportResult> {
progress = new ProgressDialog(activity);
progress.setTitle(doImport ? R.string.importing : R.string.exporting);
progress.setOnCancelListener(dialog -> cancel());
progress.setOnDismissListener(dialog -> cancel());
progress.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
ImportExportTask.this.stop();
}
});
progress.show();
}
private void cancel() {
ImportExportTask.this.stop();
}
protected ImportExportResult doInBackground(Void... nothing) {
final SQLiteDatabase database = new DBHelper(activity).getWritableDatabase();
ImportExportResult result;

View File

@@ -1,217 +1,85 @@
package protect.card_locker;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.math.BigDecimal;
import java.util.Currency;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class LoyaltyCard implements Parcelable {
public int id;
public String store;
public String note;
public final int id;
public final String store;
public final String note;
@Nullable
public Date validFrom;
public final Date validFrom;
@Nullable
public Date expiry;
public BigDecimal balance;
public final Date expiry;
public final BigDecimal balance;
@Nullable
public Currency balanceType;
public String cardId;
public final Currency balanceType;
public final String cardId;
@Nullable
public String barcodeId;
public final String barcodeId;
@Nullable
public CatimaBarcode barcodeType;
public final CatimaBarcode barcodeType;
@Nullable
public Integer headerColor;
public int starStatus;
public long lastUsed;
public final Integer headerColor;
public final int starStatus;
public final int archiveStatus;
public final long lastUsed;
public int zoomLevel;
public int archiveStatus;
public static final String BUNDLE_LOYALTY_CARD_ID = "loyaltyCardId";
public static final String BUNDLE_LOYALTY_CARD_STORE = "loyaltyCardStore";
public static final String BUNDLE_LOYALTY_CARD_NOTE = "loyaltyCardNote";
public static final String BUNDLE_LOYALTY_CARD_VALID_FROM = "loyaltyCardValidFrom";
public static final String BUNDLE_LOYALTY_CARD_EXPIRY = "loyaltyCardExpiry";
public static final String BUNDLE_LOYALTY_CARD_BALANCE = "loyaltyCardBalance";
public static final String BUNDLE_LOYALTY_CARD_BALANCE_TYPE = "loyaltyCardBalanceType";
public static final String BUNDLE_LOYALTY_CARD_CARD_ID = "loyaltyCardCardId";
public static final String BUNDLE_LOYALTY_CARD_BARCODE_ID = "loyaltyCardBarcodeId";
public static final String BUNDLE_LOYALTY_CARD_BARCODE_TYPE = "loyaltyCardBarcodeType";
public static final String BUNDLE_LOYALTY_CARD_HEADER_COLOR = "loyaltyCardHeaderColor";
public static final String BUNDLE_LOYALTY_CARD_STAR_STATUS = "loyaltyCardStarStatus";
public static final String BUNDLE_LOYALTY_CARD_LAST_USED = "loyaltyCardLastUsed";
public static final String BUNDLE_LOYALTY_CARD_ZOOM_LEVEL = "loyaltyCardZoomLevel";
public static final String BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS = "loyaltyCardArchiveStatus";
/**
* Create a loyalty card object with default values
*/
public LoyaltyCard() {
setId(-1);
setStore("");
setNote("");
setValidFrom(null);
setExpiry(null);
setBalance(new BigDecimal("0"));
setBalanceType(null);
setCardId("");
setBarcodeId(null);
setBarcodeType(null);
setHeaderColor(null);
setStarStatus(0);
setLastUsed(Utils.getUnixTime());
setZoomLevel(100);
setArchiveStatus(0);
}
/**
* Create a new loyalty card
*
* @param id
* @param store
* @param note
* @param validFrom
* @param expiry
* @param balance
* @param balanceType
* @param cardId
* @param barcodeId
* @param barcodeType
* @param headerColor
* @param starStatus
* @param lastUsed
* @param zoomLevel
* @param archiveStatus
*/
public LoyaltyCard(final int id, final String store, final String note, @Nullable final Date validFrom,
@Nullable final Date expiry, final BigDecimal balance, @Nullable final Currency balanceType,
final String cardId, @Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType,
@Nullable final Integer headerColor, final int starStatus,
final long lastUsed, final int zoomLevel, final int archiveStatus) {
setId(id);
setStore(store);
setNote(note);
setValidFrom(validFrom);
setExpiry(expiry);
setBalance(balance);
setBalanceType(balanceType);
setCardId(cardId);
setBarcodeId(barcodeId);
setBarcodeType(barcodeType);
setHeaderColor(headerColor);
setStarStatus(starStatus);
setLastUsed(lastUsed);
setZoomLevel(zoomLevel);
setArchiveStatus(archiveStatus);
}
public void setId(int id) {
this.id = id;
}
public void setStore(@NonNull String store) {
this.store = store;
}
public void setNote(@NonNull String note) {
this.note = note;
}
public void setValidFrom(@Nullable Date validFrom) {
this.validFrom = validFrom;
}
public void setExpiry(@Nullable Date expiry) {
this.expiry = expiry;
}
public void setBalance(@NonNull BigDecimal balance) {
this.balance = balance;
}
public void setBalanceType(@Nullable Currency balanceType) {
this.balanceType = balanceType;
}
public void setCardId(@NonNull String cardId) {
this.cardId = cardId;
}
public void setBarcodeId(@Nullable String barcodeId) {
this.barcodeId = barcodeId;
}
public void setBarcodeType(@Nullable CatimaBarcode barcodeType) {
this.barcodeType = barcodeType;
}
public void setHeaderColor(@Nullable Integer headerColor) {
this.headerColor = headerColor;
}
public void setStarStatus(int starStatus) {
if (starStatus != 0 && starStatus != 1) {
throw new IllegalArgumentException("starStatus must be 0 or 1");
}
this.starStatus = starStatus;
}
public void setLastUsed(long lastUsed) {
this.lastUsed = lastUsed;
}
public void setZoomLevel(int zoomLevel) {
if (zoomLevel < 0 || zoomLevel > 100) {
throw new IllegalArgumentException("zoomLevel must be in range 0-100");
}
this.zoomLevel = zoomLevel;
}
public void setArchiveStatus(int archiveStatus) {
if (archiveStatus != 0 && archiveStatus != 1) {
throw new IllegalArgumentException("archiveStatus must be 0 or 1");
}
this.archiveStatus = archiveStatus;
}
protected LoyaltyCard(Parcel in) {
setId(in.readInt());
setStore(Objects.requireNonNull(in.readString()));
setNote(Objects.requireNonNull(in.readString()));
id = in.readInt();
store = in.readString();
note = in.readString();
long tmpValidFrom = in.readLong();
setValidFrom(tmpValidFrom > 0 ? new Date(tmpValidFrom) : null);
validFrom = tmpValidFrom != -1 ? new Date(tmpValidFrom) : null;
long tmpExpiry = in.readLong();
setExpiry(tmpExpiry > 0 ? new Date(tmpExpiry) : null);
setBalance((BigDecimal) in.readValue(BigDecimal.class.getClassLoader()));
setBalanceType((Currency) in.readValue(Currency.class.getClassLoader()));
setCardId(Objects.requireNonNull(in.readString()));
setBarcodeId(in.readString());
expiry = tmpExpiry != -1 ? new Date(tmpExpiry) : null;
balance = (BigDecimal) in.readValue(BigDecimal.class.getClassLoader());
balanceType = (Currency) in.readValue(Currency.class.getClassLoader());
cardId = in.readString();
barcodeId = in.readString();
String tmpBarcodeType = in.readString();
setBarcodeType((tmpBarcodeType != null && !tmpBarcodeType.isEmpty()) ? CatimaBarcode.fromName(tmpBarcodeType) : null);
barcodeType = !tmpBarcodeType.isEmpty() ? CatimaBarcode.fromName(tmpBarcodeType) : null;
int tmpHeaderColor = in.readInt();
setHeaderColor(tmpHeaderColor != -1 ? tmpHeaderColor : null);
setStarStatus(in.readInt());
setLastUsed(in.readLong());
setZoomLevel(in.readInt());
setArchiveStatus(in.readInt());
headerColor = tmpHeaderColor != -1 ? tmpHeaderColor : null;
starStatus = in.readInt();
lastUsed = in.readLong();
zoomLevel = in.readInt();
archiveStatus = in.readInt();
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
public void writeToParcel(Parcel parcel, int i) {
parcel.writeInt(id);
parcel.writeString(store);
parcel.writeString(note);
@@ -229,171 +97,51 @@ public class LoyaltyCard implements Parcelable {
parcel.writeInt(archiveStatus);
}
public static LoyaltyCard fromBundle(Bundle bundle, boolean requireFull) {
// Grab default card
LoyaltyCard loyaltyCard = new LoyaltyCard();
// Update from bundle
loyaltyCard.updateFromBundle(bundle, requireFull);
// Return updated version
return loyaltyCard;
}
public void updateFromBundle(Bundle bundle, boolean requireFull) {
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ID)) {
setId(bundle.getInt(BUNDLE_LOYALTY_CARD_ID));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ID);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_STORE)) {
setStore(Objects.requireNonNull(bundle.getString(BUNDLE_LOYALTY_CARD_STORE)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_STORE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_NOTE)) {
setNote(Objects.requireNonNull(bundle.getString(BUNDLE_LOYALTY_CARD_NOTE)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_NOTE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_VALID_FROM)) {
long tmpValidFrom = bundle.getLong(BUNDLE_LOYALTY_CARD_VALID_FROM);
setValidFrom(tmpValidFrom > 0 ? new Date(tmpValidFrom) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_VALID_FROM);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_EXPIRY)) {
long tmpExpiry = bundle.getLong(BUNDLE_LOYALTY_CARD_EXPIRY);
setExpiry(tmpExpiry > 0 ? new Date(tmpExpiry) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_EXPIRY);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BALANCE)) {
setBalance(new BigDecimal(bundle.getString(BUNDLE_LOYALTY_CARD_BALANCE)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BALANCE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BALANCE_TYPE)) {
String tmpBalanceType = bundle.getString(BUNDLE_LOYALTY_CARD_BALANCE_TYPE);
setBalanceType(tmpBalanceType != null ? Currency.getInstance(tmpBalanceType) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BALANCE_TYPE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_CARD_ID)) {
setCardId(Objects.requireNonNull(bundle.getString(BUNDLE_LOYALTY_CARD_CARD_ID)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_CARD_ID);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BARCODE_ID)) {
setBarcodeId(bundle.getString(BUNDLE_LOYALTY_CARD_BARCODE_ID));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BARCODE_ID);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BARCODE_TYPE)) {
String tmpBarcodeType = bundle.getString(BUNDLE_LOYALTY_CARD_BARCODE_TYPE);
setBarcodeType(tmpBarcodeType != null ? CatimaBarcode.fromName(tmpBarcodeType) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BARCODE_TYPE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_HEADER_COLOR)) {
int tmpHeaderColor = bundle.getInt(BUNDLE_LOYALTY_CARD_HEADER_COLOR);
setHeaderColor(tmpHeaderColor != -1 ? tmpHeaderColor : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_HEADER_COLOR);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_STAR_STATUS)) {
setStarStatus(bundle.getInt(BUNDLE_LOYALTY_CARD_STAR_STATUS));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_STAR_STATUS);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_LAST_USED)) {
setLastUsed(bundle.getLong(BUNDLE_LOYALTY_CARD_LAST_USED));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_LAST_USED);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL)) {
setZoomLevel(bundle.getInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ZOOM_LEVEL);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS)) {
setArchiveStatus(bundle.getInt(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS);
}
}
public Bundle toBundle() {
Bundle bundle = new Bundle();
bundle.putInt(BUNDLE_LOYALTY_CARD_ID, id);
bundle.putString(BUNDLE_LOYALTY_CARD_STORE, store);
bundle.putString(BUNDLE_LOYALTY_CARD_NOTE, note);
if (validFrom != null) {
bundle.putLong(BUNDLE_LOYALTY_CARD_VALID_FROM, validFrom.getTime());
}
if (expiry != null) {
bundle.putLong(BUNDLE_LOYALTY_CARD_EXPIRY, expiry.getTime());
}
bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE, balance.toString());
if (balanceType != null) {
bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE_TYPE, balanceType.toString());
}
bundle.putString(BUNDLE_LOYALTY_CARD_CARD_ID, cardId);
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_ID, barcodeId);
if (barcodeType != null) {
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_TYPE, barcodeType.name());
}
if (headerColor != null) {
bundle.putInt(BUNDLE_LOYALTY_CARD_HEADER_COLOR, headerColor);
}
bundle.putInt(BUNDLE_LOYALTY_CARD_STAR_STATUS, starStatus);
bundle.putLong(BUNDLE_LOYALTY_CARD_LAST_USED, lastUsed);
bundle.putInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL, zoomLevel);
bundle.putInt(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS, archiveStatus);
return bundle;
}
public static LoyaltyCard fromCursor(Cursor cursor) {
// id
public static LoyaltyCard toLoyaltyCard(Cursor cursor) {
int id = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID));
// store
String store = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE));
// note
String note = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.NOTE));
// validFrom
long validFromLong = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.VALID_FROM));
Date validFrom = validFromLong > 0 ? new Date(validFromLong) : null;
// expiry
long expiryLong = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY));
Date expiry = expiryLong > 0 ? new Date(expiryLong) : null;
// balance
BigDecimal balance = new BigDecimal(cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE)));
// balanceType
int balanceTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE);
Currency balanceType = !cursor.isNull(balanceTypeColumn) ? Currency.getInstance(cursor.getString(balanceTypeColumn)) : null;
// cardId
String cardId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID));
// barcodeId
int barcodeIdColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID);
String barcodeId = !cursor.isNull(barcodeIdColumn) ? cursor.getString(barcodeIdColumn) : null;
// barcodeType
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
CatimaBarcode barcodeType = !cursor.isNull(barcodeTypeColumn) ? CatimaBarcode.fromName(cursor.getString(barcodeTypeColumn)) : null;
// headerColor
int headerColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR);
Integer headerColor = !cursor.isNull(headerColorColumn) ? cursor.getInt(headerColorColumn) : null;
// starStatus
int starStatus = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS));
// lastUsed
String barcodeId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID));
int starred = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS));
long lastUsed = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.LAST_USED));
// zoomLevel
int zoomLevel = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ZOOM_LEVEL));
// archiveStatus
int archiveStatus = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS));
int archived = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS));
return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed, zoomLevel, archiveStatus);
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
int balanceTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE);
int headerColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR);
CatimaBarcode barcodeType = null;
Currency balanceType = null;
Date validFrom = null;
Date expiry = null;
Integer headerColor = null;
if (cursor.isNull(barcodeTypeColumn) == false) {
barcodeType = CatimaBarcode.fromName(cursor.getString(barcodeTypeColumn));
}
if (cursor.isNull(balanceTypeColumn) == false) {
balanceType = Currency.getInstance(cursor.getString(balanceTypeColumn));
}
if (validFromLong > 0) {
validFrom = new Date(validFromLong);
}
if (expiryLong > 0) {
expiry = new Date(expiryLong);
}
if (cursor.isNull(headerColorColumn) == false) {
headerColor = cursor.getInt(headerColorColumn);
}
return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred, lastUsed, zoomLevel, archived);
}
public static boolean isDuplicate(final LoyaltyCard a, final LoyaltyCard b) {
@@ -416,7 +164,7 @@ public class LoyaltyCard implements Parcelable {
@Override
public int describeContents() {
return 0;
return id;
}
@NonNull

View File

@@ -15,13 +15,6 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.BlendModeColorFilterCompat;
import androidx.core.graphics.BlendModeCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.card.MaterialCardView;
import com.google.android.material.color.MaterialColors;
@@ -29,6 +22,13 @@ import java.math.BigDecimal;
import java.text.DateFormat;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.BlendModeColorFilterCompat;
import androidx.core.graphics.BlendModeCompat;
import androidx.recyclerview.widget.RecyclerView;
import protect.card_locker.databinding.LoyaltyCardLayoutBinding;
public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCursorAdapter.LoyaltyCardListItemViewHolder> {
@@ -79,7 +79,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public LoyaltyCard getCard(int position) {
mCursor.moveToPosition(position);
return LoyaltyCard.fromCursor(mCursor);
return LoyaltyCard.toLoyaltyCard(mCursor);
}
public void onBindViewHolder(LoyaltyCardListItemViewHolder inputHolder, Cursor inputCursor) {
@@ -87,7 +87,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
boolean showDivider = false;
inputHolder.mDivider.setVisibility(View.GONE);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(inputCursor);
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(inputCursor);
Bitmap icon = Utils.retrieveCardImage(mContext, loyaltyCard.id, ImageLocationType.icon);
if (mLoyaltyCardListDisplayOptions.showingNameBelowThumbnail() && icon != null) {
@@ -123,7 +123,8 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
}
inputHolder.mCardIcon.setContentDescription(loyaltyCard.store);
inputHolder.mIconBackgroundColor = Utils.setIconOrTextWithBackground(mContext, loyaltyCard, icon, inputHolder.mCardIcon, inputHolder.mCardText);
Utils.setIconOrTextWithBackground(mContext, loyaltyCard, icon, inputHolder.mCardIcon, inputHolder.mCardText);
inputHolder.setIconBackgroundColor(Utils.getHeaderColor(mContext, loyaltyCard));
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0, itemSelected(inputCursor.getPosition()));
@@ -192,7 +193,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
int i;
for (i = 0; i < mSelectedItems.size(); i++) {
mCursor.moveToPosition(mSelectedItems.keyAt(i));
result.add(LoyaltyCard.fromCursor(mCursor));
result.add(LoyaltyCard.toLoyaltyCard(mCursor));
}
return result;
@@ -338,6 +339,11 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
mArchivedBackground.invalidate();
}
public void setIconBackgroundColor(int color) {
mIconBackgroundColor = color;
mCardIcon.setBackgroundColor(color);
}
}
public int dpToPx(int dp, Context mContext) {

View File

@@ -127,6 +127,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
public static final String BUNDLE_DUPLICATE_ID = "duplicateId";
public static final String BUNDLE_UPDATE = "update";
public static final String BUNDLE_OPEN_SET_ICON_MENU = "openSetIconMenu";
public static final String BUNDLE_CARDID = "cardId";
public static final String BUNDLE_BARCODEID = "barcodeId";
public static final String BUNDLE_BARCODETYPE = "barcodeType";
public static final String BUNDLE_ADDGROUP = "addGroup";
TabLayout tabs;
@@ -159,11 +162,15 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
boolean updateLoyaltyCard;
boolean duplicateFromLoyaltyCardId;
boolean openSetIconMenu;
String cardId;
String barcodeId;
String barcodeType;
String addGroup;
Uri importLoyaltyCardUri = null;
SQLiteDatabase mDatabase;
ImportURIHelper importUriHelper;
boolean hasChanged = false;
String tempStoredOldBarcodeValue = null;
@@ -176,7 +183,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
HashMap<String, Currency> currencies = new HashMap<>();
HashMap<String, String> currencySymbols = new HashMap<>();
LoyaltyCard tempLoyaltyCard = new LoyaltyCard();
LoyaltyCard tempLoyaltyCard;
LoyaltyCardField tempLoyaltyCardField;
ActivityResultLauncher<Uri> mPhotoTakerLauncher;
@@ -208,112 +215,53 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
super.attachBaseContext(base);
}
protected void setLoyaltyCardStore(@NonNull String store) {
tempLoyaltyCard.setStore(store);
private static LoyaltyCard updateTempState(LoyaltyCard loyaltyCard, LoyaltyCardField fieldName, Object value) {
return new LoyaltyCard(
(int) (fieldName == LoyaltyCardField.id ? value : loyaltyCard.id),
(String) (fieldName == LoyaltyCardField.store ? value : loyaltyCard.store),
(String) (fieldName == LoyaltyCardField.note ? value : loyaltyCard.note),
(Date) (fieldName == LoyaltyCardField.validFrom ? value : loyaltyCard.validFrom),
(Date) (fieldName == LoyaltyCardField.expiry ? value : loyaltyCard.expiry),
(BigDecimal) (fieldName == LoyaltyCardField.balance ? value : loyaltyCard.balance),
(Currency) (fieldName == LoyaltyCardField.balanceType ? value : loyaltyCard.balanceType),
(String) (fieldName == LoyaltyCardField.cardId ? value : loyaltyCard.cardId),
(String) (fieldName == LoyaltyCardField.barcodeId ? value : loyaltyCard.barcodeId),
(CatimaBarcode) (fieldName == LoyaltyCardField.barcodeType ? value : loyaltyCard.barcodeType),
(Integer) (fieldName == LoyaltyCardField.headerColor ? value : loyaltyCard.headerColor),
(int) (fieldName == LoyaltyCardField.starStatus ? value : loyaltyCard.starStatus),
0, // Unimportant, always set to null in doSave so the DB updates it to the current timestamp
100, // Unimportant, not updated in doSave, defaults to 100 for new cards
(int) (fieldName == LoyaltyCardField.archiveStatus ? value : loyaltyCard.archiveStatus)
);
}
protected void updateTempState(LoyaltyCardField fieldName, Object value) {
tempLoyaltyCard = updateTempState(tempLoyaltyCard, fieldName, value);
if (initDone && (fieldName == LoyaltyCardField.cardId || fieldName == LoyaltyCardField.barcodeId || fieldName == LoyaltyCardField.barcodeType)) {
generateBarcode();
}
hasChanged = true;
}
protected void setLoyaltyCardNote(@NonNull String note) {
tempLoyaltyCard.setNote(note);
hasChanged = true;
}
protected void setLoyaltyCardValidFrom(@Nullable Date validFrom) {
tempLoyaltyCard.setValidFrom(validFrom);
hasChanged = true;
}
protected void setLoyaltyCardExpiry(@Nullable Date expiry) {
tempLoyaltyCard.setExpiry(expiry);
hasChanged = true;
}
protected void setLoyaltyCardBalance(@NonNull BigDecimal balance) {
tempLoyaltyCard.setBalance(balance);
hasChanged = true;
}
protected void setLoyaltyCardBalanceType(@Nullable Currency balanceType) {
tempLoyaltyCard.setBalanceType(balanceType);
hasChanged = true;
}
protected void setLoyaltyCardCardId(@NonNull String cardId) {
tempLoyaltyCard.setCardId(cardId);
generateBarcode();
hasChanged = true;
}
protected void setLoyaltyCardBarcodeId(@Nullable String barcodeId) {
tempLoyaltyCard.setBarcodeId(barcodeId);
generateBarcode();
hasChanged = true;
}
protected void setLoyaltyCardBarcodeType(@Nullable CatimaBarcode barcodeType) {
tempLoyaltyCard.setBarcodeType(barcodeType);
generateBarcode();
hasChanged = true;
}
protected void setLoyaltyCardHeaderColor(@Nullable Integer headerColor) {
tempLoyaltyCard.setHeaderColor(headerColor);
hasChanged = true;
}
/* Extract intent fields and return if code should keep running */
private boolean extractIntentFields(Intent intent) {
private void extractIntentFields(Intent intent) {
final Bundle b = intent.getExtras();
addGroup = b != null ? b.getString(BUNDLE_ADDGROUP) : null;
openSetIconMenu = b != null && b.getBoolean(BUNDLE_OPEN_SET_ICON_MENU, false);
loyaltyCardId = b != null ? b.getInt(BUNDLE_ID) : 0;
updateLoyaltyCard = b != null && b.getBoolean(BUNDLE_UPDATE, false);
duplicateFromLoyaltyCardId = b != null && b.getBoolean(BUNDLE_DUPLICATE_ID, false);
openSetIconMenu = b != null && b.getBoolean(BUNDLE_OPEN_SET_ICON_MENU, false);
cardId = b != null ? b.getString(BUNDLE_CARDID) : null;
barcodeId = b != null ? b.getString(BUNDLE_BARCODEID) : null;
barcodeType = b != null ? b.getString(BUNDLE_BARCODETYPE) : null;
addGroup = b != null ? b.getString(BUNDLE_ADDGROUP) : null;
importLoyaltyCardUri = intent.getData();
// If we have to import a loyalty card, do so
if (updateLoyaltyCard || duplicateFromLoyaltyCardId) {
tempLoyaltyCard = DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId);
if (tempLoyaltyCard == null) {
Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId);
Toast.makeText(this, R.string.noCardExistsError, Toast.LENGTH_LONG).show();
finish();
return false;
}
} else if (importLoyaltyCardUri != null) {
try {
tempLoyaltyCard = new ImportURIHelper(this).parse(importLoyaltyCardUri);
} catch (InvalidObjectException ex) {
Toast.makeText(this, R.string.failedParsingImportUriError, Toast.LENGTH_LONG).show();
finish();
return false;
}
}
// If the intent contains any loyalty card fields, override those fields in our current temp card
if (b != null) {
tempLoyaltyCard.updateFromBundle(b, false);
}
Log.d(TAG, "Edit activity: id=" + loyaltyCardId
+ ", updateLoyaltyCard=" + updateLoyaltyCard);
return true;
}
@Override
@@ -385,9 +333,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
mDatabase = new DBHelper(this).getWritableDatabase();
if (!extractIntentFields(getIntent())) {
return;
}
extractIntentFields(getIntent());
importUriHelper = new ImportURIHelper(this);
for (Currency currency : Currency.getAvailableCurrencies()) {
currencies.put(currency.getSymbol(), currency);
@@ -422,7 +370,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String storeName = s.toString().trim();
setLoyaltyCardStore(storeName);
updateTempState(LoyaltyCardField.store, storeName);
generateIcon(storeName);
if (storeName.length() == 0) {
@@ -436,7 +384,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
noteFieldEdit.addTextChangedListener(new SimpleTextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
setLoyaltyCardNote(s.toString());
updateTempState(LoyaltyCardField.note, s.toString());
}
});
@@ -449,7 +397,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
balanceField.setOnFocusChangeListener((v, hasFocus) -> {
if (!hasFocus && !onResuming && !onRestoring) {
if (balanceField.getText().toString().isEmpty()) {
setLoyaltyCardBalance(BigDecimal.valueOf(0));
updateTempState(LoyaltyCardField.balance, BigDecimal.valueOf(0));
}
balanceField.setText(Utils.formatBalanceWithoutCurrencySymbol(tempLoyaltyCard.balance, tempLoyaltyCard.balanceType));
@@ -462,7 +410,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
if (onResuming || onRestoring) return;
try {
BigDecimal balance = Utils.parseBalance(s.toString(), tempLoyaltyCard.balanceType);
setLoyaltyCardBalance(balance);
updateTempState(LoyaltyCardField.balance, balance);
balanceField.setError(null);
validBalance = true;
} catch (ParseException e) {
@@ -484,7 +432,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
currency = currencies.get(s.toString());
}
setLoyaltyCardBalanceType(currency);
updateTempState(LoyaltyCardField.balanceType, currency);
if (tempLoyaltyCard.balance != null && !onResuming && !onRestoring) {
balanceField.setText(Utils.formatBalanceWithoutCurrencySymbol(tempLoyaltyCard.balance, currency));
@@ -543,7 +491,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
setLoyaltyCardCardId(s.toString());
updateTempState(LoyaltyCardField.cardId, s.toString());
if (s.length() == 0) {
cardIdFieldView.setError(getString(R.string.field_must_not_be_empty));
@@ -568,7 +516,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
// request to update it to match the card id (if changed)
tempStoredOldBarcodeValue = null;
setLoyaltyCardBarcodeId(null);
updateTempState(LoyaltyCardField.barcodeId, null);
} else if (s.toString().equals(getString(R.string.setBarcodeId))) {
if (!lastValue.toString().equals(getString(R.string.setBarcodeId))) {
barcodeIdField.setText(lastValue);
@@ -606,7 +554,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
input.requestFocus();
} else {
setLoyaltyCardBarcodeId(s.toString());
updateTempState(LoyaltyCardField.barcodeId, s.toString());
}
}
@@ -625,12 +573,12 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!s.toString().isEmpty()) {
if (s.toString().equals(getString(R.string.noBarcode))) {
setLoyaltyCardBarcodeType(null);
updateTempState(LoyaltyCardField.barcodeType, null);
} else {
try {
CatimaBarcode barcodeFormat = CatimaBarcode.fromPrettyName(s.toString());
setLoyaltyCardBarcodeType(barcodeFormat);
updateTempState(LoyaltyCardField.barcodeType, barcodeFormat);
if (!barcodeFormat.isSupported()) {
Toast.makeText(LoyaltyCardEditActivity.this, getString(R.string.unsupportedBarcodeType), Toast.LENGTH_LONG).show();
@@ -698,22 +646,11 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
Log.d("barcode card id editor", "barcode and card id editor picker returned without an intent");
return;
}
BarcodeValues barcodeValues = Utils.parseSetBarcodeActivityResult(Utils.BARCODE_SCAN, result.getResultCode(), intent, getApplicationContext());
List<BarcodeValues> barcodeValuesList = Utils.parseSetBarcodeActivityResult(Utils.BARCODE_SCAN, result.getResultCode(), intent, getApplicationContext());
Utils.makeUserChooseBarcodeFromList(this, barcodeValuesList, new BarcodeValuesListDisambiguatorCallback() {
@Override
public void onUserChoseBarcode(BarcodeValues barcodeValues) {
setLoyaltyCardCardId(barcodeValues.content());
setLoyaltyCardBarcodeType(barcodeValues.format());
setLoyaltyCardBarcodeId("");
}
@Override
public void onUserDismissedSelector() {
}
});
cardId = barcodeValues.content();
barcodeType = barcodeValues.format();
barcodeId = "";
}
});
@@ -733,17 +670,16 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
if (bitmap != null) {
if (requestedFrontImage()) {
mFrontImageRemoved = false;
mFrontImageUnsaved = true;
setCardImage(cardImageFront, Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_BIG), true);
} else if (requestedBackImage()) {
mBackImageRemoved = false;
mBackImageUnsaved = true;
setCardImage(cardImageBack, Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_BIG), true);
} else {
mIconRemoved = false;
mIconUnsaved = true;
setThumbnailImage(Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_SMALL));
setCardImage(thumbnail, Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_SMALL), false);
thumbnail.setBackgroundColor(Color.TRANSPARENT);
setColorFromIcon();
}
Log.d("cropper", "mRequestedImage: " + mRequestedImage);
mCropperFinishedType = mRequestedImage;
@@ -841,13 +777,37 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
@SuppressLint("DefaultLocale")
@Override
protected void onResume() {
public void onResume() {
super.onResume();
Log.i(TAG, "To view card: " + loyaltyCardId);
onResuming = true;
if (tempLoyaltyCard == null) {
if (updateLoyaltyCard || duplicateFromLoyaltyCardId) {
tempLoyaltyCard = DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId);
if (tempLoyaltyCard == null) {
Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId);
Toast.makeText(this, R.string.noCardExistsError, Toast.LENGTH_LONG).show();
finish();
return;
}
} else if (importLoyaltyCardUri != null) {
try {
tempLoyaltyCard = importUriHelper.parse(importLoyaltyCardUri);
} catch (InvalidObjectException ex) {
Toast.makeText(this, R.string.failedParsingImportUriError, Toast.LENGTH_LONG).show();
finish();
return;
}
} else {
// New card, use default values
tempLoyaltyCard = new LoyaltyCard(-1, "", "", null, null, new BigDecimal("0"), null, "", null, null, null, 0, Utils.getUnixTime(), 100,0);
}
}
if (!initDone) {
if (updateLoyaltyCard) {
setTitle(R.string.editCardTitle);
@@ -863,7 +823,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
setCardImage(cardImageBack, Utils.retrieveCardImage(this, tempLoyaltyCard.id, ImageLocationType.back), true);
}
if (!mIconUnsaved && !croppedIcon() && !mIconRemoved) {
setThumbnailImage(Utils.retrieveCardImage(this, tempLoyaltyCard.id, ImageLocationType.icon));
setCardImage(thumbnail, Utils.retrieveCardImage(this, tempLoyaltyCard.id, ImageLocationType.icon), false);
}
} else {
setTitle(R.string.addCardTitle);
@@ -876,7 +836,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
setCardImage(cardImageBack, Utils.loadTempImage(this, TEMP_UNSAVED_BACK_IMAGE_NAME), true);
}
if (mIconUnsaved && !croppedIcon()) {
setThumbnailImage(Utils.loadTempImage(this, TEMP_UNSAVED_ICON_NAME));
setCardImage(thumbnail, Utils.loadTempImage(this, TEMP_UNSAVED_ICON_NAME), false);
}
}
@@ -896,7 +856,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
// which can cause issues when switching locale because it parses the balance and e.g. the decimal separator may have changed.
formatBalanceCurrencyField(tempLoyaltyCard.balanceType);
BigDecimal balance = tempLoyaltyCard.balance == null ? new BigDecimal("0") : tempLoyaltyCard.balance;
setLoyaltyCardBalance(balance);
tempLoyaltyCard = updateTempState(tempLoyaltyCard, LoyaltyCardField.balance, balance);
balanceField.setText(Utils.formatBalanceWithoutCurrencySymbol(tempLoyaltyCard.balance, tempLoyaltyCard.balanceType));
validBalance = true;
Log.d(TAG, "Setting balance to " + balance);
@@ -943,30 +903,35 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
if (tempLoyaltyCard.headerColor == null) {
// If name is set, pick colour relevant for name. Otherwise pick randomly
setLoyaltyCardHeaderColor(tempLoyaltyCard.store.isEmpty() ? Utils.getRandomHeaderColor(this) : Utils.getHeaderColor(this, tempLoyaltyCard));
updateTempState(LoyaltyCardField.headerColor, tempLoyaltyCard.store.isEmpty() ? Utils.getRandomHeaderColor(this) : Utils.getHeaderColor(this, tempLoyaltyCard));
}
// Fix up some fields
if (tempLoyaltyCard.barcodeType != null) {
// Update from intent
if (barcodeType != null) {
try {
barcodeTypeField.setText(tempLoyaltyCard.barcodeType.prettyName());
barcodeTypeField.setText(CatimaBarcode.fromName(barcodeType).prettyName());
} catch (IllegalArgumentException e) {
barcodeTypeField.setText(getString(R.string.noBarcode));
}
}
if (tempLoyaltyCard.cardId != null) {
cardIdFieldView.setText(tempLoyaltyCard.cardId);
if (cardId != null) {
cardIdFieldView.setText(cardId);
}
if (tempLoyaltyCard.barcodeId != null) {
if (!tempLoyaltyCard.barcodeId.isEmpty()) {
barcodeIdField.setText(tempLoyaltyCard.barcodeId);
if (barcodeId != null) {
if (!barcodeId.isEmpty()) {
barcodeIdField.setText(barcodeId);
} else {
barcodeIdField.setText(getString(R.string.sameAsCardId));
}
}
// Empty intent values
barcodeType = null;
cardId = null;
barcodeId = null;
// Initialization has finished
if (!initDone) {
initDone = true;
@@ -987,6 +952,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
generateIcon(storeFieldEdit.getText().toString().trim());
// It can't be null because we set it in updateTempState but SpotBugs insists it can be
// NP_NULL_ON_SOME_PATH: Possible null pointer dereference and
// NP_NULL_PARAM_DEREF: Method call passes null for non-null parameter
Integer headerColor = tempLoyaltyCard.headerColor;
if (headerColor != null) {
thumbnail.setOnClickListener(new ChooseCardImage());
@@ -1010,7 +978,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
if (icon != null && (icon instanceof Bitmap)) {
int headerColor = Utils.getHeaderColorFromImage((Bitmap) icon, Utils.getHeaderColor(this, tempLoyaltyCard));
setLoyaltyCardHeaderColor(headerColor);
updateTempState(LoyaltyCardField.headerColor, headerColor);
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(headerColor) ? Color.WHITE : Color.BLACK);
@@ -1019,22 +987,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
}
}
protected void setThumbnailImage(@Nullable Bitmap bitmap) {
setCardImage(thumbnail, bitmap, false);
if (bitmap == null) {
generateIcon(storeFieldEdit.getText().toString().trim());
} else {
thumbnail.setBackgroundColor(Color.TRANSPARENT);
setColorFromIcon();
}
if (tempLoyaltyCard.headerColor != null) {
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(tempLoyaltyCard.headerColor) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(tempLoyaltyCard.headerColor) ? Color.WHITE : Color.BLACK);
}
}
protected void setCardImage(ImageView imageView, Bitmap bitmap, boolean applyFallback) {
imageView.setTag(bitmap);
@@ -1058,16 +1010,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.toString().equals(getString(defaultOptionStringId))) {
dateField.setTag(null);
switch (loyaltyCardField) {
case validFrom:
setLoyaltyCardValidFrom(null);
break;
case expiry:
setLoyaltyCardExpiry(null);
break;
default:
throw new AssertionError("Unexpected field: " + loyaltyCardField);
}
updateTempState(loyaltyCardField, null);
} else if (s.toString().equals(getString(chooseDateOptionStringId))) {
if (!lastValue.toString().equals(getString(chooseDateOptionStringId))) {
dateField.setText(lastValue);
@@ -1284,7 +1227,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), ScanActivity.class);
final Bundle b = new Bundle();
b.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID, cardIdFieldView.getText().toString());
b.putString(LoyaltyCardEditActivity.BUNDLE_CARDID, cardIdFieldView.getText().toString());
i.putExtras(b);
mCardIdAndBarCodeEditorLauncher.launch(i);
}
@@ -1371,28 +1314,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
return null;
});
if (v.getId() == R.id.thumbnail) {
if (cardImageFront.getTag() instanceof Bitmap) {
cardOptions.put(getString(R.string.useFrontImage), () -> {
mIconRemoved = false;
mIconUnsaved = true;
setThumbnailImage(Utils.resizeBitmap((Bitmap) cardImageFront.getTag(), Utils.BITMAP_SIZE_SMALL));
return null;
});
}
if (cardImageBack.getTag() instanceof Bitmap) {
cardOptions.put(getString(R.string.useBackImage), () -> {
mIconRemoved = false;
mIconUnsaved = true;
setThumbnailImage(Utils.resizeBitmap((Bitmap) cardImageBack.getTag(), Utils.BITMAP_SIZE_SMALL));
return null;
});
}
}
int titleResource;
if (v.getId() == R.id.frontImageHolder) {
@@ -1433,13 +1354,17 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
// We don't need to set or check the dialogId since it's only used for that single dialog
@Override
public void onColorSelected(int dialogId, int color) {
// Save new colour
setLoyaltyCardHeaderColor(color);
// Unset image if set
setCardImage(thumbnail, null, false);
mIconRemoved = true;
mIconUnsaved = false;
setThumbnailImage(null);
updateTempState(LoyaltyCardField.headerColor, color);
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(color) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(color) ? Color.WHITE : Color.BLACK);
generateIcon(storeFieldEdit.getText().toString().trim());
}
// ColorPickerDialogListener callback
@@ -1525,11 +1450,11 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
switch (tempLoyaltyCardField) {
case validFrom:
formatDateField(LoyaltyCardEditActivity.this, validFromField, newDate);
setLoyaltyCardValidFrom(newDate);
updateTempState(LoyaltyCardField.validFrom, newDate);
break;
case expiry:
formatDateField(LoyaltyCardEditActivity.this, expiryField, newDate);
setLoyaltyCardExpiry(newDate);
updateTempState(LoyaltyCardField.expiry, newDate);
break;
default:
throw new AssertionError("Unexpected field: " + tempLoyaltyCardField);
@@ -1623,6 +1548,8 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
e.printStackTrace();
}
Log.i(TAG, "Set " + loyaltyCardId + " to " + cardId + " (update: " + updateLoyaltyCard + ")");
DBHelper.setLoyaltyCardGroups(mDatabase, loyaltyCardId, selectedGroups);
ShortcutHelper.updateShortcuts(this, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId));
@@ -1720,6 +1647,10 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
}
private void generateBarcode() {
if (tempLoyaltyCard == null) {
return;
}
mTasks.flushTaskList(TaskHandler.TYPE.BARCODE, true, false, false);
String cardIdString = tempLoyaltyCard.barcodeId != null ? tempLoyaltyCard.barcodeId : tempLoyaltyCard.cardId;

View File

@@ -3,7 +3,6 @@ package protect.card_locker;
import android.app.Application;
import androidx.appcompat.app.AppCompatDelegate;
import protect.card_locker.preferences.Settings;
public class LoyaltyCardLockerApplication extends Application {

View File

@@ -1,6 +1,7 @@
package protect.card_locker;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.ColorStateList;
@@ -19,7 +20,6 @@ import android.text.method.DigitsKeyListener;
import android.text.style.ForegroundColorSpan;
import android.text.util.Linkify;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -47,6 +47,7 @@ import androidx.core.graphics.BlendModeColorFilterCompat;
import androidx.core.graphics.BlendModeCompat;
import androidx.core.graphics.ColorUtils;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsControllerCompat;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import com.google.android.material.color.MaterialColors;
@@ -60,6 +61,7 @@ import java.text.DateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Currency;
import java.util.Date;
import java.util.List;
import java.util.function.Predicate;
@@ -98,35 +100,9 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
static final String STATE_IMAGEINDEX = "imageIndex";
static final String STATE_FULLSCREEN = "isFullscreen";
static final String BUNDLE_ID = "id";
static final String BUNDLE_CARDLIST = "cardList";
static final String BUNDLE_TRANSITION_RIGHT = "transition_right";
final private TaskHandler mTasks = new TaskHandler();
Runnable barcodeImageGenerationFinishedCallback;
private long initTime = System.currentTimeMillis();
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (settings.useVolumeKeysForNavigation()) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
// Navigate to the previous card
if (initTime < (System.currentTimeMillis() - 1000)) {
prevNextCard(false);
}
return true;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
// Navigate to the next card
if (initTime < (System.currentTimeMillis() - 1000)) {
prevNextCard(true);
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
public void onMainImageTap() {
// If we're in fullscreen, leave fullscreen
if (isFullscreen) {
@@ -134,25 +110,22 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
return;
}
ImageType imageType = imageTypes.get(mainImageIndex);
// If the barcode is shown, switch to fullscreen layout
if (imageType == ImageType.BARCODE) {
if (imageTypes.get(mainImageIndex) == ImageType.BARCODE) {
setFullscreen(true);
return;
}
// If this is an image, open it in the gallery.
openImageInGallery(imageType);
openCurrentMainImageInGallery();
}
private void openImageInGallery(ImageType imageType) {
private void openCurrentMainImageInGallery() {
ImageType wantedImageType = imageTypes.get(mainImageIndex);
File file = null;
switch (imageType) {
case ICON:
file = Utils.retrieveCardImageAsFile(this, loyaltyCardId, ImageLocationType.icon);
break;
switch (wantedImageType) {
case IMAGE_FRONT:
file = Utils.retrieveCardImageAsFile(this, loyaltyCardId, ImageLocationType.front);
break;
@@ -200,7 +173,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
enum ImageType {
NONE,
ICON,
BARCODE,
IMAGE_FRONT,
IMAGE_BACK
@@ -208,8 +180,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
private void extractIntentFields(Intent intent) {
final Bundle b = intent.getExtras();
loyaltyCardId = b != null ? b.getInt(BUNDLE_ID) : 0;
cardList = b != null ? b.getIntegerArrayList(BUNDLE_CARDLIST) : null;
loyaltyCardId = b != null ? b.getInt("id") : 0;
cardList = b != null ? b.getIntegerArrayList("cardList") : null;
Log.d(TAG, "View activity: id=" + loyaltyCardId);
}
@@ -235,7 +207,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
return;
}
int transitionRight = incomingIntentExtras.getInt(BUNDLE_TRANSITION_RIGHT, -1);
int transitionRight = incomingIntentExtras.getInt("transition_right", -1);
if (transitionRight == 1) {
// right side transition
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
@@ -328,13 +300,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
binding.bottomAppBarNextButton.setOnClickListener(view -> prevNextCard(true));
binding.bottomAppBarUpdateBalanceButton.setOnClickListener(view -> showBalanceUpdateDialog());
binding.iconContainer.setOnClickListener(view -> {
if (Utils.retrieveCardImage(this, loyaltyCard.id, ImageLocationType.icon) != null) {
openImageInGallery(ImageType.ICON);
} else {
Toast.makeText(LoyaltyCardViewActivity.this, R.string.icon_header_click_text, Toast.LENGTH_LONG).show();
}
});
binding.iconContainer.setOnClickListener(view -> Toast.makeText(LoyaltyCardViewActivity.this, R.string.icon_header_click_text, Toast.LENGTH_LONG).show());
binding.iconContainer.setOnLongClickListener(view -> {
Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
Bundle bundle = new Bundle();
@@ -445,11 +411,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
private void showBalanceUpdateDialog() {
AlertDialog.Builder builder = new MaterialAlertDialogBuilder(this);
// Header
builder.setTitle(R.string.updateBalanceTitle);
// Layout
FrameLayout container = new FrameLayout(this);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -467,91 +429,61 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
currentTextview.setText(getString(R.string.currentBalanceSentence, Utils.formatBalance(this, loyaltyCard.balance, loyaltyCard.balanceType)));
layout.addView(currentTextview);
TextView updateTextView = new TextView(this);
updateTextView.setText(getString(R.string.newBalanceSentence, Utils.formatBalance(this, loyaltyCard.balance, loyaltyCard.balanceType)));
layout.addView(updateTextView);
final TextInputEditText input = new TextInputEditText(this);
input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
Context dialogContext = this;
input.setInputType(InputType.TYPE_CLASS_NUMBER);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789,."));
input.setHint(R.string.updateBalanceHint);
input.addTextChangedListener(new SimpleTextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
BigDecimal newBalance;
try {
newBalance = calculateNewBalance(loyaltyCard.balance, loyaltyCard.balanceType, s.toString());
} catch (ParseException e) {
input.setTag(null);
updateTextView.setText(getString(R.string.newBalanceSentence, Utils.formatBalance(dialogContext, loyaltyCard.balance, loyaltyCard.balanceType)));
return;
}
// Save new balance into this element
input.setTag(newBalance);
updateTextView.setText(getString(R.string.newBalanceSentence, Utils.formatBalance(dialogContext, newBalance, loyaltyCard.balanceType)));
}
});
layout.addView(input);
layout.setLayoutParams(params);
container.addView(layout);
// Set layout
builder.setView(container);
// Buttons
builder.setPositiveButton(R.string.spend, (dialogInterface, i) -> {
// Calculate and update balance
try {
BigDecimal balanceChange = Utils.parseBalance(input.getText().toString(), loyaltyCard.balanceType);
BigDecimal newBalance = loyaltyCard.balance.subtract(balanceChange).max(new BigDecimal(0));
DBHelper.updateLoyaltyCardBalance(database, loyaltyCardId, newBalance);
} catch (ParseException e) {
Toast.makeText(getApplicationContext(), R.string.amountParsingFailed, Toast.LENGTH_LONG).show();
builder.setPositiveButton(R.string.ok, (dialogInterface, i) -> {
// Grab calculated balance from input field
BigDecimal newBalance = (BigDecimal) input.getTag();
if (newBalance == null) {
return;
}
// Reload state
// Actually update balance
DBHelper.updateLoyaltyCardBalance(database, loyaltyCardId, newBalance);
// Reload UI
this.onResume();
// Show new balance
Toast.makeText(getApplicationContext(), getString(R.string.newBalanceSentence, Utils.formatBalance(this, loyaltyCard.balance, loyaltyCard.balanceType)), Toast.LENGTH_LONG).show();
});
builder.setNegativeButton(R.string.receive, (dialogInterface, i) -> {
// Calculate and update balance
try {
BigDecimal balanceChange = Utils.parseBalance(input.getText().toString(), loyaltyCard.balanceType);
BigDecimal newBalance = loyaltyCard.balance.add(balanceChange);
DBHelper.updateLoyaltyCardBalance(database, loyaltyCardId, newBalance);
} catch (ParseException e) {
Toast.makeText(getApplicationContext(), R.string.amountParsingFailed, Toast.LENGTH_LONG).show();
}
// Reload state
this.onResume();
// Show new balance
Toast.makeText(getApplicationContext(), getString(R.string.newBalanceSentence, Utils.formatBalance(this, loyaltyCard.balance, loyaltyCard.balanceType)), Toast.LENGTH_LONG).show();
});
builder.setNeutralButton(getString(R.string.cancel), (dialog, which) -> dialog.cancel());
builder.setNegativeButton(getString(R.string.cancel), (dialog, which) -> dialog.cancel());
AlertDialog dialog = builder.create();
// Now that the dialog exists, we can bind something that affects the buttons
input.addTextChangedListener(new SimpleTextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
BigDecimal balanceChange;
try {
balanceChange = Utils.parseBalance(s.toString(), loyaltyCard.balanceType);
} catch (ParseException e) {
input.setError(getString(R.string.amountParsingFailed));
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
return;
}
input.setError(null);
if (balanceChange.equals(new BigDecimal(0))) {
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
} else {
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(true);
}
}
});
dialog.show();
// Disable buttons (must be done **after** dialog is shown to prevent crash
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
// Set focus on input field
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
input.requestFocus();
}
private BigDecimal calculateNewBalance(BigDecimal currentBalance, Currency currency, String unparsedSubtraction) throws ParseException {
BigDecimal subtraction = Utils.parseBalance(unparsedSubtraction, currency);
return currentBalance.subtract(subtraction).max(new BigDecimal(0));
}
private void setBottomAppBarButtonState() {
if (!loyaltyCard.note.isEmpty() || !loyaltyCardGroups.isEmpty() || hasBalance(loyaltyCard) || loyaltyCard.validFrom != null || loyaltyCard.expiry != null) {
binding.bottomAppBarInfoButton.setVisibility(View.VISIBLE);
@@ -599,8 +531,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
// Restart activity with new card id and index
Intent intent = getIntent();
Bundle b = intent.getExtras();
b.putInt(BUNDLE_ID, loyaltyCardId);
b.putInt(BUNDLE_TRANSITION_RIGHT, transitionRight ? 1 : 0);
b.putInt("id", loyaltyCardId);
b.putInt("transition_right", transitionRight ? 1 : 0);
intent.putExtras(b);
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
@@ -623,8 +555,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
@Override
protected void onResume() {
activityOverridesNavBarColor = true;
public void onResume() {
super.onResume();
Log.i(TAG, "To view card: " + loyaltyCardId);
@@ -678,15 +609,10 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
cardIdString = loyaltyCard.cardId;
barcodeIdString = loyaltyCard.barcodeId;
binding.mainImageDescription.setText(loyaltyCard.cardId);
binding.cardIdView.setText(loyaltyCard.cardId);
// Display full text on click in case it doesn't fit in a single line
binding.mainImageDescription.setOnClickListener(v -> {
if (mainImageIndex != 0) {
// Don't show cardId dialog, we're displaying something else
return;
}
binding.cardIdView.setOnClickListener(v -> {
TextView cardIdView = new TextView(LoyaltyCardViewActivity.this);
cardIdView.setText(loyaltyCard.cardId);
cardIdView.setTextIsSelectable(true);
@@ -710,7 +636,11 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
// Set bottomAppBar and system navigation bar color
binding.bottomAppBar.setBackgroundColor(darkenedColor);
Utils.setNavigationBarColor(null, window, darkenedColor, Utils.needsDarkForeground(darkenedColor));
if (window != null && Build.VERSION.SDK_INT >= 27) {
WindowInsetsControllerCompat wic = new WindowInsetsControllerCompat(window, binding.getRoot());
wic.setAppearanceLightNavigationBars(Utils.needsDarkForeground(darkenedColor));
window.setNavigationBarColor(darkenedColor);
}
int complementaryColor = Utils.getComplementaryColor(darkenedColor);
binding.fabEdit.setBackgroundTintList(ColorStateList.valueOf(complementaryColor));
@@ -765,8 +695,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
DBHelper.updateLoyaltyCardLastUsed(database, loyaltyCard.id);
invalidateOptionsMenu();
ShortcutHelper.updateShortcuts(this, loyaltyCard);
}
private void setStateBasedOnImageTypes() {
@@ -866,8 +794,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 1);
Toast.makeText(LoyaltyCardViewActivity.this, R.string.archived, Toast.LENGTH_LONG).show();
ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId);
// Re-init loyaltyCard with new data from DB
onResume();
invalidateOptionsMenu();
@@ -959,9 +885,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
if (imageTypes.isEmpty()) {
barcodeRenderTarget.setVisibility(View.GONE);
binding.mainCardView.setCardBackgroundColor(Color.TRANSPARENT);
binding.mainImageDescription.setTextColor(MaterialColors.getColor(binding.mainImageDescription, com.google.android.material.R.attr.colorOnSurfaceVariant));
binding.mainImageDescription.setText(loyaltyCard.cardId);
binding.cardIdView.setTextColor(MaterialColors.getColor(binding.cardIdView, com.google.android.material.R.attr.colorOnSurfaceVariant));
return;
}
@@ -970,7 +894,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
if (wantedImageType == ImageType.BARCODE) {
barcodeRenderTarget.setBackgroundColor(Color.WHITE);
binding.mainCardView.setCardBackgroundColor(Color.WHITE);
binding.mainImageDescription.setTextColor(getResources().getColor(R.color.md_theme_light_onSurfaceVariant));
binding.cardIdView.setTextColor(getResources().getColor(R.color.md_theme_light_onSurfaceVariant));
if (waitForResize) {
redrawBarcodeAfterResize(!isFullscreen);
@@ -978,23 +902,18 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
drawBarcode(!isFullscreen);
}
binding.mainImageDescription.setText(loyaltyCard.cardId);
barcodeRenderTarget.setContentDescription(getString(R.string.barcodeImageDescriptionWithType, format.prettyName()));
} else if (wantedImageType == ImageType.IMAGE_FRONT) {
barcodeRenderTarget.setImageBitmap(frontImageBitmap);
barcodeRenderTarget.setBackgroundColor(Color.TRANSPARENT);
binding.mainCardView.setCardBackgroundColor(Color.TRANSPARENT);
binding.mainImageDescription.setTextColor(MaterialColors.getColor(binding.mainImageDescription, com.google.android.material.R.attr.colorOnSurfaceVariant));
binding.mainImageDescription.setText(getString(R.string.frontImageDescription));
binding.cardIdView.setTextColor(MaterialColors.getColor(binding.cardIdView, com.google.android.material.R.attr.colorOnSurfaceVariant));
barcodeRenderTarget.setContentDescription(getString(R.string.frontImageDescription));
} else if (wantedImageType == ImageType.IMAGE_BACK) {
barcodeRenderTarget.setImageBitmap(backImageBitmap);
barcodeRenderTarget.setBackgroundColor(Color.TRANSPARENT);
binding.mainCardView.setCardBackgroundColor(Color.TRANSPARENT);
binding.mainImageDescription.setTextColor(MaterialColors.getColor(binding.mainImageDescription, com.google.android.material.R.attr.colorOnSurfaceVariant));
binding.mainImageDescription.setText(getString(R.string.backImageDescription));
binding.cardIdView.setTextColor(MaterialColors.getColor(binding.cardIdView, com.google.android.material.R.attr.colorOnSurfaceVariant));
barcodeRenderTarget.setContentDescription(getString(R.string.backImageDescription));
} else {
throw new IllegalArgumentException("Unknown image type: " + wantedImageType);

View File

@@ -7,7 +7,8 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.database.CursorIndexOutOfBoundsException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -22,7 +23,6 @@ import android.widget.Toast;
import androidx.activity.OnBackPressedCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.SearchView;
@@ -33,10 +33,10 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.tabs.TabLayout;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@@ -150,7 +150,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
Log.d(TAG, "Archiving card: " + loyaltyCard.id);
DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, loyaltyCard.id, 1);
ShortcutHelper.removeShortcut(MainActivity.this, loyaltyCard.id);
updateLoyaltyCardList(false);
inputMode.finish();
invalidateOptionsMenu();
@@ -195,12 +194,10 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
@Override
protected void onCreate(Bundle inputSavedInstanceState) {
extractIntentFields(getIntent());
SplashScreen.installSplashScreen(this);
super.onCreate(inputSavedInstanceState);
// We should extract the share intent after we called the super.onCreate as it may need to spawn a dialog window and the app needs to be initialized to not crash
extractIntentFields(getIntent());
binding = MainActivityBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
@@ -252,6 +249,37 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
mGroup = null;
updateLoyaltyCardList(true);
/*
* This was added for Huawei, but Huawei is just too much of a fucking pain.
* Just leaving this commented out if needed for the future idk
* https://twitter.com/SylvieLorxu/status/1379437902741012483
*
// Show privacy policy on first run
SharedPreferences privacyPolicyShownPref = getApplicationContext().getSharedPreferences(
getString(R.string.sharedpreference_privacy_policy_shown),
Context.MODE_PRIVATE);
if (privacyPolicyShownPref.getInt(getString(R.string.sharedpreference_privacy_policy_shown), 0) == 0) {
SharedPreferences.Editor privacyPolicyShownPrefEditor = privacyPolicyShownPref.edit();
privacyPolicyShownPrefEditor.putInt(getString(R.string.sharedpreference_privacy_policy_shown), 1);
privacyPolicyShownPrefEditor.apply();
new AlertDialog.Builder(this)
.setTitle(R.string.privacy_policy)
.setMessage(R.string.privacy_policy_popup_text)
.setPositiveButton(R.string.accept, null)
.setNegativeButton(R.string.privacy_policy, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
openPrivacyPolicy();
}
})
.setIcon(android.R.drawable.ic_dialog_info)
.show();
}
*/
mBarcodeScannerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
// Exit early if the user cancelled the scan (pressed back/home)
if (result.getResultCode() != RESULT_OK) {
@@ -259,11 +287,11 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
Intent intent = result.getData();
List<BarcodeValues> barcodeValuesList = Utils.parseSetBarcodeActivityResult(Utils.BARCODE_SCAN, result.getResultCode(), intent, this);
BarcodeValues barcodeValues = Utils.parseSetBarcodeActivityResult(Utils.BARCODE_SCAN, result.getResultCode(), intent, this);
Bundle inputBundle = intent.getExtras();
String group = inputBundle != null ? inputBundle.getString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP) : null;
processBarcodeValuesList(barcodeValuesList, group, false);
processBarcodeValues(barcodeValues, group);
});
mSettingsLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
@@ -418,62 +446,63 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
}
private void processBarcodeValuesList(List<BarcodeValues> barcodeValuesList, String group, boolean closeAppOnNoBarcode) {
if (barcodeValuesList.isEmpty()) {
private void processBarcodeValues(BarcodeValues barcodeValues, String group) {
if (barcodeValues.isEmpty()) {
throw new IllegalArgumentException("barcodesValues may not be empty");
}
Utils.makeUserChooseBarcodeFromList(MainActivity.this, barcodeValuesList, new BarcodeValuesListDisambiguatorCallback() {
@Override
public void onUserChoseBarcode(BarcodeValues barcodeValues) {
CatimaBarcode barcodeType = barcodeValues.format();
Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
Bundle bundle = new Bundle();
bundle.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID, barcodeValues.content());
bundle.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
bundle.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_ID, null);
if (group != null) {
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, group);
}
intent.putExtras(bundle);
startActivity(intent);
}
@Override
public void onUserDismissedSelector() {
if (closeAppOnNoBarcode) {
finish();
}
}
});
Intent newIntent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
Bundle newBundle = new Bundle();
newBundle.putString(LoyaltyCardEditActivity.BUNDLE_BARCODETYPE, barcodeValues.format());
newBundle.putString(LoyaltyCardEditActivity.BUNDLE_CARDID, barcodeValues.content());
if (group != null) {
newBundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, group);
}
newIntent.putExtras(newBundle);
startActivity(newIntent);
}
private void onSharedIntent(Intent intent) {
String receivedAction = intent.getAction();
String receivedType = intent.getType();
// Check if an image or file was shared to us
// Check if an image was shared to us
if (Intent.ACTION_SEND.equals(receivedAction)) {
List<BarcodeValues> barcodeValuesList;
if (receivedType.equals("text/plain")) {
barcodeValuesList = Collections.singletonList(new BarcodeValues(null, intent.getStringExtra(Intent.EXTRA_TEXT)));
} else if (receivedType.startsWith("image/")) {
barcodeValuesList = Utils.retrieveBarcodesFromImage(this, intent.getParcelableExtra(Intent.EXTRA_STREAM));
} else if (receivedType.equals("application/pdf")) {
barcodeValuesList = Utils.retrieveBarcodesFromPdf(this, intent.getParcelableExtra(Intent.EXTRA_STREAM));
} else {
if (!receivedType.startsWith("image/")) {
Log.e(TAG, "Wrong mime-type");
return;
}
if (barcodeValuesList.isEmpty()) {
BarcodeValues barcodeValues;
Bitmap bitmap;
Uri data = intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (data == null) {
Toast.makeText(this, R.string.errorReadingImage, Toast.LENGTH_LONG).show();
finish();
return;
}
processBarcodeValuesList(barcodeValuesList, null, true);
try {
bitmap = Utils.retrieveImageFromUri(this, data);
} catch (IOException e) {
Log.e(TAG, "Error getting data from image file");
e.printStackTrace();
Toast.makeText(this, R.string.errorReadingImage, Toast.LENGTH_LONG).show();
finish();
return;
}
barcodeValues = Utils.getBarcodeFromBitmap(bitmap);
if (barcodeValues.isEmpty()) {
Log.i(TAG, "No barcode found in image file");
Toast.makeText(this, R.string.noBarcodeFound, Toast.LENGTH_LONG).show();
finish();
return;
}
processBarcodeValues(barcodeValues, null);
}
}
@@ -516,8 +545,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if (searchManager != null) {
MenuItem searchMenuItem = inputMenu.findItem(R.id.action_search);
mSearchView = (SearchView) searchMenuItem.getActionView();
mSearchView = (SearchView) inputMenu.findItem(R.id.action_search).getActionView();
mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
mSearchView.setSubmitButtonEnabled(false);
@@ -526,30 +554,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
return false;
});
/*
* On Android 13 and later, pressing Back while the search view is open hides the keyboard
* and collapses the search view at the same time.
* This brings back the old behavior on Android 12 and lower: pressing Back once
* hides the keyboard, press again while keyboard is hidden to collapse the search view.
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(@NonNull MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(@NonNull MenuItem item) {
if (mSearchView.hasFocus()) {
mSearchView.clearFocus();
return false;
}
return true;
}
});
}
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
@@ -784,16 +788,18 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
Intent intent = new Intent(this, LoyaltyCardViewActivity.class);
intent.setAction("");
final Bundle b = new Bundle();
b.putInt(LoyaltyCardViewActivity.BUNDLE_ID, loyaltyCard.id);
b.putInt("id", loyaltyCard.id);
ArrayList<Integer> cardList = new ArrayList<>();
for (int i = 0; i < mAdapter.getItemCount(); i++) {
cardList.add(mAdapter.getCard(i).id);
}
b.putIntegerArrayList(LoyaltyCardViewActivity.BUNDLE_CARDLIST, cardList);
b.putIntegerArrayList("cardList", cardList);
intent.putExtras(b);
ShortcutHelper.updateShortcuts(MainActivity.this, loyaltyCard);
startActivity(intent);
}
}

View File

@@ -13,12 +13,6 @@ import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.OnBackPressedCallback;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
@@ -26,6 +20,12 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import androidx.activity.OnBackPressedCallback;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.RecyclerView;
import protect.card_locker.databinding.ActivityManageGroupBinding;
public class ManageGroupActivity extends CatimaAppCompatActivity implements ManageGroupCursorAdapter.CardAdapterListener {

View File

@@ -33,7 +33,7 @@ public class ManageGroupCursorAdapter extends LoyaltyCardCursorAdapter {
@Override
public void onBindViewHolder(LoyaltyCardListItemViewHolder inputHolder, Cursor inputCursor) {
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(inputCursor);
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(inputCursor);
Boolean overlayValue = mInGroupOverlay.get(loyaltyCard.id);
if ((overlayValue != null ? overlayValue : isLoyaltyCardInGroup(loyaltyCard.id))) {
mAnimationItemsIndex.put(inputCursor.getPosition(), true);

View File

@@ -14,17 +14,17 @@ import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.List;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.List;
import protect.card_locker.databinding.ManageGroupsActivityBinding;
public class ManageGroupsActivity extends CatimaAppCompatActivity implements GroupCursorAdapter.GroupAdapterListener {

View File

@@ -24,8 +24,6 @@ import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
@@ -34,6 +32,7 @@ import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@@ -44,8 +43,6 @@ import com.journeyapps.barcodescanner.BarcodeResult;
import com.journeyapps.barcodescanner.CaptureManager;
import com.journeyapps.barcodescanner.DecoratedBarcodeView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import protect.card_locker.databinding.CustomBarcodeScannerBinding;
@@ -66,7 +63,6 @@ public class ScanActivity extends CatimaAppCompatActivity {
private static final int COMPAT_SCALE_FACTOR_DIP = 320;
private static final int PERMISSION_SCAN_ADD_FROM_IMAGE = 100;
private static final int PERMISSION_SCAN_ADD_FROM_PDF = 101;
private CaptureManager capture;
private DecoratedBarcodeView barcodeScannerView;
@@ -78,15 +74,13 @@ public class ScanActivity extends CatimaAppCompatActivity {
private ActivityResultLauncher<Intent> manualAddLauncher;
// can't use the pre-made contract because that launches the file manager for image type instead of gallery
private ActivityResultLauncher<Intent> photoPickerLauncher;
private ActivityResultLauncher<Intent> pdfPickerLauncher;
static final String STATE_SCANNER_ACTIVE = "scannerActive";
private boolean mScannerActive = true;
private boolean mHasError = false;
private void extractIntentFields(Intent intent) {
final Bundle b = intent.getExtras();
cardId = b != null ? b.getString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID) : null;
cardId = b != null ? b.getString(LoyaltyCardEditActivity.BUNDLE_CARDID) : null;
addGroup = b != null ? b.getString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP) : null;
Log.d(TAG, "Scan activity: id=" + cardId);
}
@@ -106,44 +100,17 @@ public class ScanActivity extends CatimaAppCompatActivity {
manualAddLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> handleActivityResult(Utils.SELECT_BARCODE_REQUEST, result.getResultCode(), result.getData()));
photoPickerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> handleActivityResult(Utils.BARCODE_IMPORT_FROM_IMAGE_FILE, result.getResultCode(), result.getData()));
pdfPickerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> handleActivityResult(Utils.BARCODE_IMPORT_FROM_PDF_FILE, result.getResultCode(), result.getData()));
customBarcodeScannerBinding.fabOtherOptions.setOnClickListener(view -> {
setScannerActive(false);
ArrayList<HashMap<String, Object>> list = new ArrayList<>();
String[] texts = new String[]{
getString(R.string.addWithoutBarcode),
getString(R.string.addManually),
getString(R.string.addFromImage),
getString(R.string.addFromPdfFile),
};
Object[] icons = new Object[]{
R.drawable.baseline_block_24,
R.drawable.ic_edit,
R.drawable.baseline_image_24,
R.drawable.baseline_picture_as_pdf_24,
};
String[] columns = new String[]{"text", "icon"};
for (int i = 0; i < texts.length; i++) {
HashMap<String, Object> map = new HashMap<>();
map.put(columns[0], texts[i]);
map.put(columns[1], icons[i]);
list.add(map);
}
ListAdapter adapter = new SimpleAdapter(
ScanActivity.this,
list,
R.layout.alertdialog_row_with_icon,
columns,
new int[]{R.id.textView, R.id.imageView}
);
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ScanActivity.this);
builder.setTitle(getString(R.string.add_a_card_in_a_different_way));
builder.setAdapter(
adapter,
builder.setItems(
new CharSequence[]{
getString(R.string.addWithoutBarcode),
getString(R.string.addManually),
getString(R.string.addFromImage)
},
(dialogInterface, i) -> {
switch (i) {
case 0:
@@ -155,9 +122,6 @@ public class ScanActivity extends CatimaAppCompatActivity {
case 2:
addFromImage();
break;
case 3:
addFromPdfFile();
break;
default:
throw new IllegalArgumentException("Unknown 'Add a card in a different way' dialog option");
}
@@ -171,7 +135,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
// Even though we do the actual decoding with the barcodeScannerView
// CaptureManager needs to be running to show the camera and scanning bar
capture = new CatimaCaptureManager(this, barcodeScannerView, this::onCaptureManagerError);
capture = new CatimaCaptureManager(this, barcodeScannerView);
Intent captureIntent = new Intent();
Bundle captureIntentBundle = new Bundle();
captureIntentBundle.putBoolean(Intents.Scan.BEEP_ENABLED, false);
@@ -208,14 +172,9 @@ public class ScanActivity extends CatimaAppCompatActivity {
capture.onResume();
}
if (!Utils.deviceHasCamera(this)) {
showCameraError(getString(R.string.noCameraFoundGuideText), false);
} else if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
showCameraPermissionMissingText();
} else {
hideCameraError();
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
showCameraPermissionMissingText(false);
}
scaleScreen();
}
@@ -310,26 +269,14 @@ public class ScanActivity extends CatimaAppCompatActivity {
private void handleActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
List<BarcodeValues> barcodeValuesList = Utils.parseSetBarcodeActivityResult(requestCode, resultCode, intent, this);
BarcodeValues barcodeValues = Utils.parseSetBarcodeActivityResult(requestCode, resultCode, intent, this);
if (barcodeValuesList.isEmpty()) {
if (barcodeValues.isEmpty()) {
setScannerActive(true);
return;
}
Utils.makeUserChooseBarcodeFromList(this, barcodeValuesList, new BarcodeValuesListDisambiguatorCallback() {
@Override
public void onUserChoseBarcode(BarcodeValues barcodeValues) {
CatimaBarcode barcodeType = barcodeValues.format();
returnResult(barcodeValues.content(), barcodeType != null ? barcodeType.name() : null);
}
@Override
public void onUserDismissedSelector() {
setScannerActive(true);
}
});
returnResult(barcodeValues.content(), barcodeValues.format());
}
private void addWithoutBarcode() {
@@ -369,7 +316,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
// Buttons
builder.setPositiveButton(getString(R.string.ok), (dialog, which) -> {
returnResult(input.getText().toString(), null);
returnResult(input.getText().toString(), "");
});
builder.setNegativeButton(getString(R.string.cancel), (dialog, which) -> dialog.cancel());
AlertDialog dialog = builder.create();
@@ -397,79 +344,42 @@ public class ScanActivity extends CatimaAppCompatActivity {
}
public void addManually() {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ScanActivity.this);
builder.setTitle(R.string.add_manually_warning_title);
builder.setMessage(R.string.add_manually_warning_message);
builder.setPositiveButton(R.string.continue_, (dialog, which) -> {
Intent i = new Intent(getApplicationContext(), BarcodeSelectorActivity.class);
if (cardId != null) {
final Bundle b = new Bundle();
b.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID, cardId);
i.putExtras(b);
}
manualAddLauncher.launch(i);
});
builder.setNegativeButton(R.string.cancel, (dialog, which) -> setScannerActive(true));
builder.setOnCancelListener(dialog -> setScannerActive(true));
builder.show();
Intent i = new Intent(getApplicationContext(), BarcodeSelectorActivity.class);
if (cardId != null) {
final Bundle b = new Bundle();
b.putString("initialCardId", cardId);
i.putExtras(b);
}
manualAddLauncher.launch(i);
}
public void addFromImage() {
PermissionUtils.requestStorageReadPermission(this, PERMISSION_SCAN_ADD_FROM_IMAGE);
}
public void addFromPdfFile() {
PermissionUtils.requestStorageReadPermission(this, PERMISSION_SCAN_ADD_FROM_PDF);
}
private void addFromImageOrFileAfterPermission(String mimeType, ActivityResultLauncher<Intent> launcher, int chooserText, int errorMessage) {
private void addFromImageAfterPermission() {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType(mimeType);
photoPickerIntent.setType("image/*");
Intent contentIntent = new Intent(Intent.ACTION_GET_CONTENT);
contentIntent.setType(mimeType);
contentIntent.setType("image/*");
Intent chooserIntent = Intent.createChooser(photoPickerIntent, getString(chooserText));
Intent chooserIntent = Intent.createChooser(photoPickerIntent, getString(R.string.addFromImage));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { contentIntent });
try {
launcher.launch(chooserIntent);
photoPickerLauncher.launch(chooserIntent);
} catch (ActivityNotFoundException e) {
setScannerActive(true);
Toast.makeText(getApplicationContext(), errorMessage, Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), R.string.failedLaunchingPhotoPicker, Toast.LENGTH_LONG).show();
Log.e(TAG, "No activity found to handle intent", e);
}
}
public void onCaptureManagerError(String errorMessage) {
if (mHasError) {
// We're already showing an error, ignore this new error
return;
}
showCameraError(errorMessage, false);
}
private void showCameraPermissionMissingText() {
showCameraError(getString(R.string.noCameraPermissionDirectToSystemSetting), true);
}
private void showCameraError(String message, boolean setOnClick) {
customBarcodeScannerBinding.cameraErrorLayout.cameraErrorMessage.setText(message);
setCameraErrorState(true, setOnClick);
}
private void hideCameraError() {
setCameraErrorState(false, false);
}
private void setCameraErrorState(boolean visible, boolean setOnClick) {
mHasError = visible;
customBarcodeScannerBinding.cameraErrorLayout.cameraErrorClickableArea.setOnClickListener(visible && setOnClick ? v -> {
private void showCameraPermissionMissingText(boolean show) {
customBarcodeScannerBinding.cameraPermissionDeniedLayout.cameraPermissionDeniedClickableArea.setOnClickListener(show ? v -> {
navigateToSystemPermissionSetting();
} : null);
customBarcodeScannerBinding.cardInputContainer.setBackgroundColor(visible ? obtainThemeAttribute(com.google.android.material.R.attr.colorSurface) : Color.TRANSPARENT);
customBarcodeScannerBinding.cameraErrorLayout.getRoot().setVisibility(visible ? View.VISIBLE : View.GONE);
customBarcodeScannerBinding.cardInputContainer.setBackgroundColor(show ? obtainThemeAttribute(com.google.android.material.R.attr.colorSurface) : Color.TRANSPARENT);
customBarcodeScannerBinding.cameraPermissionDeniedLayout.getRoot().setVisibility(show ? View.VISIBLE : View.GONE);
}
private void scaleScreen() {
@@ -479,8 +389,8 @@ public class ScanActivity extends CatimaAppCompatActivity {
float mediumSizePx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,MEDIUM_SCALE_FACTOR_DIP,getResources().getDisplayMetrics());
boolean shouldScaleSmaller = screenHeight < mediumSizePx;
customBarcodeScannerBinding.cameraErrorLayout.cameraErrorIcon.setVisibility(shouldScaleSmaller ? View.GONE : View.VISIBLE);
customBarcodeScannerBinding.cameraErrorLayout.cameraErrorTitle.setVisibility(shouldScaleSmaller ? View.GONE : View.VISIBLE);
customBarcodeScannerBinding.cameraPermissionDeniedLayout.cameraPermissionDeniedIcon.setVisibility(shouldScaleSmaller ? View.GONE : View.VISIBLE);
customBarcodeScannerBinding.cameraPermissionDeniedLayout.cameraPermissionDeniedTitle.setVisibility(shouldScaleSmaller ? View.GONE : View.VISIBLE);
}
private int obtainThemeAttribute(int attribute) {
@@ -506,18 +416,10 @@ public class ScanActivity extends CatimaAppCompatActivity {
boolean granted = grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
if (requestCode == CaptureManager.getCameraPermissionReqCode()) {
showCameraPermissionMissingText(!granted);
} else if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE) {
if (granted) {
hideCameraError();
} else {
showCameraPermissionMissingText();
}
} else if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE || requestCode == PERMISSION_SCAN_ADD_FROM_PDF) {
if (granted) {
if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE) {
addFromImageOrFileAfterPermission("image/*", photoPickerLauncher, R.string.addFromImage, R.string.failedLaunchingPhotoPicker);
} else {
addFromImageOrFileAfterPermission("application/pdf", pdfPickerLauncher, R.string.addFromPdfFile, R.string.failedLaunchingFileManager);
}
addFromImageAfterPermission();
} else {
setScannerActive(true);
Toast.makeText(this, R.string.storageReadPermissionRequired, Toast.LENGTH_LONG).show();

View File

@@ -8,11 +8,6 @@ import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
import androidx.core.graphics.ColorUtils;
import androidx.core.graphics.drawable.IconCompat;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
@@ -20,6 +15,11 @@ import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
import androidx.core.graphics.ColorUtils;
import androidx.core.graphics.drawable.IconCompat;
class ShortcutHelper {
// Android documentation says that no more than 5 shortcuts
// are supported. However, that may be too many, as not all
@@ -43,11 +43,6 @@ class ShortcutHelper {
* used card shortcut is discarded.
*/
static void updateShortcuts(Context context, LoyaltyCard card) {
if (card.archiveStatus == 1) {
// Don't add archived card to menu
return;
}
LinkedList<ShortcutInfoCompat> list = new LinkedList<>(ShortcutManagerCompat.getDynamicShortcuts(context));
SQLiteDatabase database = new DBHelper(context).getReadableDatabase();
@@ -113,7 +108,18 @@ class ShortcutHelper {
* shortcut exists.
*/
static void removeShortcut(Context context, int cardId) {
ShortcutManagerCompat.removeDynamicShortcuts(context, Collections.singletonList(Integer.toString(cardId)));
List<ShortcutInfoCompat> list = ShortcutManagerCompat.getDynamicShortcuts(context);
String shortcutId = Integer.toString(cardId);
for (int index = 0; index < list.size(); index++) {
if (list.get(index).getId().equals(shortcutId)) {
list.remove(index);
break;
}
}
ShortcutManagerCompat.setDynamicShortcuts(context, list);
}
static @NotNull
@@ -133,7 +139,8 @@ class ShortcutHelper {
// one replace it.
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_SINGLE_TOP);
final Bundle bundle = new Bundle();
bundle.putInt(LoyaltyCardViewActivity.BUNDLE_ID, loyaltyCard.id);
bundle.putInt("id", loyaltyCard.id);
bundle.putBoolean("view", true);
intent.putExtras(bundle);
Bitmap iconBitmap = Utils.retrieveCardImage(context, loyaltyCard.id, ImageLocationType.icon);

View File

@@ -11,16 +11,16 @@ import android.view.Window;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.textview.MaterialTextView;
import com.yalantis.ucrop.UCropActivity;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.ColorUtils;
import androidx.core.view.WindowInsetsControllerCompat;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.textview.MaterialTextView;
import com.yalantis.ucrop.UCropActivity;
public class UCropWrapper extends UCropActivity {
public static final String UCROP_TOOLBAR_TYPEFACE_STYLE = "ucop_toolbar_typeface_style";

View File

@@ -12,12 +12,8 @@ import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.ImageDecoder;
import android.graphics.Matrix;
import android.graphics.pdf.PdfRenderer;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.net.Uri;
import android.os.Build;
import android.os.ParcelFileDescriptor;
import android.provider.MediaStore;
import android.text.Layout;
import android.text.Spanned;
@@ -32,19 +28,16 @@ import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RawRes;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.graphics.ColorUtils;
import androidx.core.os.LocaleListCompat;
import androidx.core.view.WindowInsetsControllerCompat;
import androidx.core.widget.TextViewCompat;
import androidx.exifinterface.media.ExifInterface;
import androidx.palette.graphics.Palette;
import com.google.android.material.color.DynamicColors;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
@@ -52,8 +45,6 @@ import com.google.zxing.NotFoundException;
import com.google.zxing.RGBLuminanceSource;
import com.google.zxing.Result;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.multi.GenericMultipleBarcodeReader;
import com.google.zxing.multi.MultipleBarcodeReader;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
@@ -68,13 +59,10 @@ import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Currency;
import java.util.Date;
import java.util.GregorianCalendar;
@@ -94,13 +82,12 @@ public class Utils {
public static final int SELECT_BARCODE_REQUEST = 2;
public static final int BARCODE_SCAN = 3;
public static final int BARCODE_IMPORT_FROM_IMAGE_FILE = 4;
public static final int BARCODE_IMPORT_FROM_PDF_FILE = 5;
public static final int CARD_IMAGE_FROM_CAMERA_FRONT = 6;
public static final int CARD_IMAGE_FROM_CAMERA_BACK = 7;
public static final int CARD_IMAGE_FROM_CAMERA_ICON = 8;
public static final int CARD_IMAGE_FROM_FILE_FRONT = 9;
public static final int CARD_IMAGE_FROM_FILE_BACK = 10;
public static final int CARD_IMAGE_FROM_FILE_ICON = 11;
public static final int CARD_IMAGE_FROM_CAMERA_FRONT = 5;
public static final int CARD_IMAGE_FROM_CAMERA_BACK = 6;
public static final int CARD_IMAGE_FROM_CAMERA_ICON = 7;
public static final int CARD_IMAGE_FROM_FILE_FRONT = 8;
public static final int CARD_IMAGE_FROM_FILE_BACK = 9;
public static final int CARD_IMAGE_FROM_FILE_ICON = 10;
public static final String CARD_IMAGE_FILENAME_REGEX = "^(card_)(\\d+)(_(?:front|back|icon)\\.png)$";
@@ -143,91 +130,6 @@ public class Utils {
return ColorUtils.calculateLuminance(backgroundColor) > LUMINANCE_MIDPOINT;
}
static public List<BarcodeValues> retrieveBarcodesFromImage(Context context, Uri uri) {
Log.i(TAG, "Received image file with possible barcode");
if (uri == null) {
Log.e(TAG, "Uri did not contain any data");
Toast.makeText(context, R.string.errorReadingImage, Toast.LENGTH_LONG).show();
return new ArrayList<>();
}
Bitmap bitmap;
try {
bitmap = retrieveImageFromUri(context, uri);
} catch (IOException e) {
Log.e(TAG, "Error getting data from image file");
e.printStackTrace();
Toast.makeText(context, R.string.errorReadingImage, Toast.LENGTH_LONG).show();
return new ArrayList<>();
}
List<BarcodeValues> barcodesFromBitmap = getBarcodesFromBitmap(bitmap);
if (barcodesFromBitmap.isEmpty()) {
Log.i(TAG, "No barcode found in image file");
Toast.makeText(context, R.string.noBarcodeFound, Toast.LENGTH_LONG).show();
}
return barcodesFromBitmap;
}
static public List<BarcodeValues> retrieveBarcodesFromPdf(Context context, Uri uri) {
Log.i(TAG, "Received PDF file with possible barcode");
if (uri == null) {
Log.e(TAG, "Uri did not contain any data");
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
}
ParcelFileDescriptor parcelFileDescriptor = null;
PdfRenderer renderer = null;
List<BarcodeValues> barcodesFromPdfPages = new ArrayList<>();
try {
parcelFileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r");
if (parcelFileDescriptor != null) {
renderer = new PdfRenderer(parcelFileDescriptor);
// Loop over all pages to find barcodes
Bitmap renderedPage;
for (int i = 0; i < renderer.getPageCount(); i++) {
PdfRenderer.Page page = renderer.openPage(i);
renderedPage = Bitmap.createBitmap(page.getWidth(), page.getHeight(), Bitmap.Config.ARGB_8888);
page.render(renderedPage, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
page.close();
List<BarcodeValues> barcodesFromPage = getBarcodesFromBitmap(renderedPage);
for (BarcodeValues barcodeValues : barcodesFromPage) {
barcodeValues.setNote(String.format(context.getString(R.string.pageWithNumber), i+1));
barcodesFromPdfPages.add(barcodeValues);
}
}
}
} catch (IOException e) {
Log.e(TAG, "Error reading PDF file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
} finally {
// Resource handling
if (renderer != null) {
renderer.close();
}
if (parcelFileDescriptor != null) {
try {
parcelFileDescriptor.close();
} catch (IOException e) {
Log.e(TAG, "Error closing ParcelFileDescriptor", e);
}
}
}
if (barcodesFromPdfPages.isEmpty()) {
Log.i(TAG, "No barcode found in pdf file");
Toast.makeText(context, R.string.noBarcodeFound, Toast.LENGTH_LONG).show();
}
return barcodesFromPdfPages;
}
/**
* Returns the Barcode format and content based on the result of an activity.
* It shows toasts to notify the end-user as needed itself and will return an empty
@@ -239,20 +141,45 @@ public class Utils {
* @param context
* @return BarcodeValues
*/
static public List<BarcodeValues> parseSetBarcodeActivityResult(int requestCode, int resultCode, Intent intent, Context context) {
static public BarcodeValues parseSetBarcodeActivityResult(int requestCode, int resultCode, Intent intent, Context context) {
String contents;
String format;
if (resultCode != Activity.RESULT_OK) {
return new ArrayList<>();
return new BarcodeValues(null, null);
}
if (requestCode == Utils.BARCODE_IMPORT_FROM_IMAGE_FILE) {
return retrieveBarcodesFromImage(context, intent.getData());
}
Log.i(TAG, "Received image file with possible barcode");
if (requestCode == Utils.BARCODE_IMPORT_FROM_PDF_FILE) {
return retrieveBarcodesFromPdf(context, intent.getData());
Uri data = intent.getData();
if (data == null) {
Log.e(TAG, "Intent did not contain any data");
Toast.makeText(context, R.string.errorReadingImage, Toast.LENGTH_LONG).show();
return new BarcodeValues(null, null);
}
Bitmap bitmap;
try {
bitmap = retrieveImageFromUri(context, data);
} catch (IOException e) {
Log.e(TAG, "Error getting data from image file");
e.printStackTrace();
Toast.makeText(context, R.string.errorReadingImage, Toast.LENGTH_LONG).show();
return new BarcodeValues(null, null);
}
BarcodeValues barcodeFromBitmap = getBarcodeFromBitmap(bitmap);
if (barcodeFromBitmap.isEmpty()) {
Log.i(TAG, "No barcode found in image file");
Toast.makeText(context, R.string.noBarcodeFound, Toast.LENGTH_LONG).show();
}
Log.i(TAG, "Read barcode id: " + barcodeFromBitmap.content());
Log.i(TAG, "Read format: " + barcodeFromBitmap.format());
return barcodeFromBitmap;
}
if (requestCode == Utils.BARCODE_SCAN || requestCode == Utils.SELECT_BARCODE_REQUEST) {
@@ -268,7 +195,7 @@ public class Utils {
Log.i(TAG, "Read barcode id: " + contents);
Log.i(TAG, "Read format: " + format);
return Collections.singletonList(new BarcodeValues(format != null ? CatimaBarcode.fromName(format) : null, contents));
return new BarcodeValues(format, contents);
}
throw new UnsupportedOperationException("Unknown request code for parseSetBarcodeActivityResult");
@@ -288,22 +215,22 @@ public class Utils {
return MediaStore.Images.Media.getBitmap(context.getContentResolver(), data);
}
static public List<BarcodeValues> getBarcodesFromBitmap(Bitmap bitmap) {
static public BarcodeValues getBarcodeFromBitmap(Bitmap bitmap) {
// This function is vulnerable to OOM, so we try again with a smaller bitmap is we get OOM
for (int i = 0; i < 10; i++) {
try {
return Utils.getBarcodesFromBitmapReal(bitmap);
return Utils.getBarcodeFromBitmapReal(bitmap);
} catch (OutOfMemoryError e) {
Log.w(TAG, "Ran OOM in getBarcodesFromBitmap! Trying again with smaller picture! Retry " + i + " of 10.");
Log.w(TAG, "Ran OOM in getBarcodeFromBitmap! Trying again with smaller picture! Retry " + i + " of 10.");
bitmap = Bitmap.createScaledBitmap(bitmap, (int) Math.round(0.75 * bitmap.getWidth()), (int) Math.round(0.75 * bitmap.getHeight()), false);
}
}
// Give up
return new ArrayList<>();
return new BarcodeValues(null, null);
}
static private List<BarcodeValues> getBarcodesFromBitmapReal(Bitmap bitmap) {
static private BarcodeValues getBarcodeFromBitmapReal(Bitmap bitmap) {
// In order to decode it, the Bitmap must first be converted into a pixel array...
int[] intArray = new int[bitmap.getWidth() * bitmap.getHeight()];
bitmap.getPixels(intArray, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
@@ -312,63 +239,15 @@ public class Utils {
LuminanceSource source = new RGBLuminanceSource(bitmap.getWidth(), bitmap.getHeight(), intArray);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
List<BarcodeValues> barcodeValuesList = new ArrayList<>();
try {
MultiFormatReader multiFormatReader = new MultiFormatReader();
MultipleBarcodeReader multipleBarcodeReader = new GenericMultipleBarcodeReader(multiFormatReader);
Result barcodeResult = new MultiFormatReader().decode(binaryBitmap);
Result[] barcodeResults = multipleBarcodeReader.decodeMultiple(binaryBitmap);
for (Result barcodeResult : barcodeResults) {
Log.i(TAG, "Read barcode id: " + barcodeResult.getText());
Log.i(TAG, "Read format: " + barcodeResult.getBarcodeFormat().name());
barcodeValuesList.add(new BarcodeValues(CatimaBarcode.fromBarcode(barcodeResult.getBarcodeFormat()), barcodeResult.getText()));
}
return barcodeValuesList;
return new BarcodeValues(barcodeResult.getBarcodeFormat().name(), barcodeResult.getText());
} catch (NotFoundException e) {
return barcodeValuesList;
return new BarcodeValues(null, null);
}
}
static public void makeUserChooseBarcodeFromList(Context context, List<BarcodeValues> barcodeValuesList, BarcodeValuesListDisambiguatorCallback callback) {
// If there is only one choice, consider it chosen
if (barcodeValuesList.size() == 1) {
callback.onUserChoseBarcode(barcodeValuesList.get(0));
return;
}
// Ask user to choose a barcode
// TODO: This should contain an image of the barcode in question to help users understand the choice they're making
CharSequence[] barcodeDescriptions = new CharSequence[barcodeValuesList.size()];
for (int i = 0; i < barcodeValuesList.size(); i++) {
BarcodeValues barcodeValues = barcodeValuesList.get(i);
CatimaBarcode catimaBarcode = barcodeValues.format();
String barcodeContent = barcodeValues.content();
// Shorten overly long barcodes
if (barcodeContent.length() > 22) {
barcodeContent = barcodeContent.substring(0, 20) + "";
}
if (barcodeValues.note() != null) {
barcodeDescriptions[i] = String.format("%s: %s (%s)", barcodeValues.note(), catimaBarcode != null ? catimaBarcode.prettyName() : context.getString(R.string.noBarcode), barcodeContent);
} else {
barcodeDescriptions[i] = String.format("%s (%s)", catimaBarcode != null ? catimaBarcode.prettyName() : context.getString(R.string.noBarcode), barcodeContent);
}
}
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context);
builder.setTitle(context.getString(R.string.multipleBarcodesFoundPleaseChooseOne));
builder.setItems(
barcodeDescriptions,
(dialogInterface, i) -> callback.onUserChoseBarcode(barcodeValuesList.get(i))
);
builder.setOnCancelListener(dialogInterface -> callback.onUserDismissedSelector());
builder.show();
}
static public Boolean isNotYetValid(Date validFromDate) {
// The note in `hasExpired` does not apply here, since the bug was fixed before this feature was added.
return validFromDate.after(getStartOfToday().getTime());
@@ -396,7 +275,6 @@ public class Utils {
static public String formatBalance(Context context, BigDecimal value, Currency currency) {
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setGroupingUsed(false);
if (currency == null) {
numberFormat.setMaximumFractionDigits(0);
@@ -404,7 +282,6 @@ public class Utils {
}
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
currencyFormat.setGroupingUsed(false);
currencyFormat.setCurrency(currency);
currencyFormat.setMinimumFractionDigits(currency.getDefaultFractionDigits());
currencyFormat.setMaximumFractionDigits(currency.getDefaultFractionDigits());
@@ -414,7 +291,6 @@ public class Utils {
static public String formatBalanceWithoutCurrencySymbol(BigDecimal value, Currency currency) {
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setGroupingUsed(false);
if (currency == null) {
numberFormat.setMaximumFractionDigits(0);
@@ -427,72 +303,19 @@ public class Utils {
return numberFormat.format(value);
}
private static final double LargestPreciseDouble = (double) (1l << 53);
static{
assert (LargestPreciseDouble + 1.0) == LargestPreciseDouble;
assert (LargestPreciseDouble - 1.0) != LargestPreciseDouble;
}
private static BigDecimal fromParsed(Number parsed){
if(parsed instanceof BigDecimal)
return (BigDecimal) parsed;
final double d = parsed.doubleValue();
if(d >= LargestPreciseDouble)
return new BigDecimal(parsed.longValue());
return new BigDecimal(d);
}
static public BigDecimal parseBalance(String value, Currency currency) throws ParseException {
// This function expects the input string to not have any grouping (thousand separators).
// It will refuse to work otherwise
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setGroupingUsed(false);
if (numberFormat instanceof DecimalFormat) {
((DecimalFormat) numberFormat).setParseBigDecimal(true);
}
if (currency == null) {
numberFormat.setMaximumFractionDigits(0);
} else {
int fractionDigits = currency.getDefaultFractionDigits();
numberFormat.setMinimumFractionDigits(fractionDigits);
numberFormat.setMaximumFractionDigits(fractionDigits);
if (numberFormat instanceof DecimalFormat) {
// If the string contains both thousand separators and decimals separators, fail hard
DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) numberFormat).getDecimalFormatSymbols();
char decimalSeparator = decimalFormatSymbols.getDecimalSeparator();
// Translate all non-digits to decimal separators, failing if we find more than 1.
// We loop over the codepoints to make sure eastern arabic numerals are not mistakenly
// treated as a separator.
boolean separatorFound = false;
StringBuilder translatedValue = new StringBuilder();
for (int i = 0; i < value.length();) {
int character = value.codePointAt(i);
if (Character.isDigit(character)) {
translatedValue.append(value.charAt(i));
} else {
if (separatorFound) {
throw new ParseException("Contains multiple separators", i);
}
separatorFound = true;
translatedValue.append(decimalSeparator);
}
i += Character.charCount(character);
}
value = translatedValue.toString();
}
numberFormat.setMinimumFractionDigits(currency.getDefaultFractionDigits());
numberFormat.setMaximumFractionDigits(currency.getDefaultFractionDigits());
}
return fromParsed(numberFormat.parse(value));
Log.d(TAG, numberFormat.parse(value).toString());
return new BigDecimal(numberFormat.parse(value).toString());
}
static public byte[] bitmapToByteArray(Bitmap bitmap) {
@@ -842,33 +665,25 @@ public class Utils {
}
}
// Force correct color
// Fixes OLED dark mode in MainActivity
// XXX android 9 and below has issues with patched theme where the background becomes a
// rendering mess
// use after views are inflated
public static void postPatchColors(AppCompatActivity activity) {
activity.findViewById(android.R.id.content).setBackgroundColor(resolveBackgroundColor(activity));
}
TypedValue typedValue = new TypedValue();
activity.getTheme().resolveAttribute(android.R.attr.colorBackground, typedValue, true);
activity.findViewById(android.R.id.content).setBackgroundColor(typedValue.data);
// Either pass an Activity on which to call getWindow() or an existing Window (may be null) returned by that function.
public static void setNavigationBarColor(@Nullable AppCompatActivity activity, @Nullable Window window, int color, boolean useLightBars) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
if (window == null && activity != null) {
window = activity.getWindow();
}
if (Build.VERSION.SDK_INT >= 27) {
Window window = activity.getWindow();
if (window != null) {
View decorView = window.getDecorView();
WindowInsetsControllerCompat wic = new WindowInsetsControllerCompat(window, decorView);
wic.setAppearanceLightNavigationBars(useLightBars);
window.setNavigationBarColor(color);
wic.setAppearanceLightNavigationBars(!isDarkModeEnabled(activity));
window.setNavigationBarColor(typedValue.data);
}
}
}
public static int resolveBackgroundColor(AppCompatActivity activity) {
TypedValue typedValue = new TypedValue();
activity.getTheme().resolveAttribute(android.R.attr.colorBackground, typedValue, true);
return typedValue.data;
}
public static int getHeaderColorFromImage(Bitmap image, int fallback) {
if (image == null) {
return fallback;
@@ -924,46 +739,23 @@ public class Utils {
.replaceAll("(?<!href=\")\\b(https?://[\\w@#%&+=:?/.-]*[\\w@#%&+=:?/-])", "<a href=\"$1\">$1</a>");
}
/**
* Sets an icon or text with background on the given ImageView and/or TextView, including background colour.
*
* @param context Android context
* @param loyaltyCard Loyalty Card
* @param icon Bitmap of the icon to set, or null
* @param backgroundOrIcon ImageView to draw the icon and background on to
* @param textWhenNoImage TextView to write the loyalty card name into if icon is null
* @return background colour
*/
public static int setIconOrTextWithBackground(Context context, LoyaltyCard loyaltyCard, Bitmap icon, ImageView backgroundOrIcon, TextView textWhenNoImage) {
int headerColor = getHeaderColor(context, loyaltyCard);
backgroundOrIcon.setImageBitmap(icon);
backgroundOrIcon.setBackgroundColor(headerColor);
public static void setIconOrTextWithBackground(Context context, LoyaltyCard loyaltyCard, Bitmap icon, ImageView backgroundOrIcon, TextView textWhenNoImage) {
if (icon != null) {
Log.d("onResume", "setting icon image");
textWhenNoImage.setVisibility(View.GONE);
backgroundOrIcon.setImageBitmap(icon);
backgroundOrIcon.setBackgroundColor(Color.TRANSPARENT);
} else {
// Manually calculate how many lines will be needed
// This is necessary because Android's auto sizing will split over lines way before reaching the minimum font size and store names split over multiple lines are harder to scan with a quick glance so we should try to prevent it
// Because we have to write the text before we can actually know the exact laid out size (trying to delay this causes bugs where the autosize fails) we have to take some... weird shortcuts
// At this point textWhenNoImage.getWidth() still returns 0, so we cheat by calculating the whole width of the screen and then dividing it by the amount of columns
int textviewWidth = Resources.getSystem().getDisplayMetrics().widthPixels / context.getResources().getInteger(R.integer.main_view_card_columns);
// Calculate how wide a character is and calculate how many characters fit in a line
int characterWidth = TextViewCompat.getAutoSizeMinTextSize(textWhenNoImage);
int maxWidthPerLine = textviewWidth - textWhenNoImage.getPaddingStart() - textWhenNoImage.getPaddingEnd();
// Set amount of lines based on what could fit at most
int maxLines = ((loyaltyCard.store.length() * characterWidth) / maxWidthPerLine) + 1;
textWhenNoImage.setMaxLines(maxLines);
// Actually set the text and colour
textWhenNoImage.setVisibility(View.VISIBLE);
int headerColor = getHeaderColor(context, loyaltyCard);
backgroundOrIcon.setImageBitmap(null);
backgroundOrIcon.setBackgroundColor(headerColor);
textWhenNoImage.setText(loyaltyCard.store);
textWhenNoImage.setTextColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
}
return headerColor;
}
public static boolean installedFromGooglePlay(Context context) {
@@ -1034,12 +826,4 @@ public class Utils {
return false;
});
}
public static boolean deviceHasCamera(Context context) {
try {
return ((CameraManager) context.getSystemService(Context.CAMERA_SERVICE)).getCameraIdList().length > 0;
} catch (CameraAccessException e) {
return false;
}
}
}

View File

@@ -64,7 +64,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
// For each card
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor);
// For each image
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
@@ -142,7 +142,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor);
printer.printRecord(card.id,
card.store,
@@ -176,7 +176,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor2 = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor2.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor2);
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor2);
for (Group group : DBHelper.getLoyaltyCardGroups(database, card.id)) {
printer.printRecord(card.id, group._id);

View File

@@ -9,9 +9,8 @@ import androidx.annotation.NonNull;
import com.google.zxing.BarcodeFormat;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.io.inputstream.ZipInputStream;
import net.lingala.zip4j.model.FileHeader;
import net.lingala.zip4j.model.LocalFileHeader;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
@@ -21,7 +20,9 @@ import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
@@ -129,9 +130,11 @@ public class StocardImporter implements Importer {
throw new FormatException("Issue parsing CSV data", e);
}
ZipFile zipFile = new ZipFile(inputFile, password);
zipData = importZIP(zipFile, zipData);
zipFile.close();
InputStream input = new FileInputStream(inputFile);
ZipInputStream zipInputStream = new ZipInputStream(input, password);
zipData = importZIP(zipInputStream, zipData);
zipInputStream.close();
input.close();
if (zipData.cards.keySet().size() == 0) {
throw new FormatException("Couldn't find any loyalty cards in this Stocard export.");
@@ -141,7 +144,7 @@ public class StocardImporter implements Importer {
saveAndDeduplicate(context, database, importedData);
}
public ZIPData importZIP(ZipFile zipFile, final ZIPData zipData) throws IOException, FormatException, JSONException {
public ZIPData importZIP(ZipInputStream zipInputStream, final ZIPData zipData) throws IOException, FormatException, JSONException {
Map<String, StocardRecord> cards = zipData.cards;
Map<String, StocardProvider> providers = zipData.providers;
@@ -149,8 +152,9 @@ public class StocardImporter implements Importer {
String[] cardBaseName = null;
String customProviderId = "";
String cardName = "";
for (FileHeader fileHeader : zipFile.getFileHeaders()) {
String fileName = fileHeader.getFileName();
LocalFileHeader localFileHeader;
while ((localFileHeader = zipInputStream.getNextEntry()) != null) {
String fileName = localFileHeader.getFileName();
String[] nameParts = fileName.split("/");
if (nameParts.length < 2) {
@@ -158,7 +162,6 @@ public class StocardImporter implements Importer {
}
String userId = nameParts[1];
ZipInputStream zipInputStream = zipFile.getInputStream(fileHeader);
if (customProvidersBaseName == null) {
// FIXME: can we use the points-account/statement/content.json balance info somehow?
@@ -299,8 +302,6 @@ public class StocardImporter implements Importer {
} else if (!fileName.endsWith("/")) {
Log.d(TAG, "Unknown or unused file " + fileName + ", skipping...");
}
zipInputStream.close();
}
return new ZIPData(cards, providers);

View File

@@ -3,13 +3,12 @@ package protect.card_locker.preferences;
import android.content.Context;
import android.content.SharedPreferences;
import java.util.Locale;
import androidx.annotation.IntegerRes;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.preference.PreferenceManager;
import java.util.Locale;
import protect.card_locker.R;
import protect.card_locker.Utils;
@@ -91,8 +90,4 @@ public class Settings {
public String getColor() {
return getString(R.string.setting_key_theme_color, mContext.getResources().getString(R.string.settings_key_system_theme));
}
public boolean useVolumeKeysForNavigation() {
return getBoolean(R.string.settings_key_use_volume_keys_navigation, false);
}
}

View File

@@ -1,5 +1,6 @@
package protect.card_locker.preferences;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;

View File

@@ -1,5 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="?attr/colorControlNormal" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM4,12c0,-4.42 3.58,-8 8,-8 1.85,0 3.55,0.63 4.9,1.69L5.69,16.9C4.63,15.55 4,13.85 4,12zM12,20c-1.85,0 -3.55,-0.63 -4.9,-1.69L18.31,7.1C19.37,8.45 20,10.15 20,12c0,4.42 -3.58,8 -8,8z"/>
</vector>

View File

@@ -1,5 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="?attr/colorControlNormal" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M21,19V5c0,-1.1 -0.9,-2 -2,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2zM8.5,13.5l2.5,3.01L14.5,12l4.5,6H5l3.5,-4.5z"/>
</vector>

View File

@@ -1,5 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="?attr/colorControlNormal" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M20,2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM11.5,9.5c0,0.83 -0.67,1.5 -1.5,1.5L9,11v2L7.5,13L7.5,7L10,7c0.83,0 1.5,0.67 1.5,1.5v1zM16.5,11.5c0,0.83 -0.67,1.5 -1.5,1.5h-2.5L12.5,7L15,7c0.83,0 1.5,0.67 1.5,1.5v3zM20.5,8.5L19,8.5v1h1.5L20.5,11L19,11v2h-1.5L17.5,7h3v1.5zM9,9.5h1v-1L9,8.5v1zM4,6L2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6zM14,11.5h1v-3h-1v3z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="?attr/colorControlNormal"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M7.41,18.59L8.83,20 12,16.83 15.17,20l1.41,-1.41L12,14l-4.59,4.59zM16.59,5.41L15.17,4 12,7.17 8.83,4 7.41,5.41 12,10l4.59,-4.59z"/>
</vector>

View File

@@ -10,8 +10,7 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
@@ -21,12 +20,11 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"
android:paddingVertical="8dp"
android:clipToPadding="false">
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
@@ -37,17 +35,14 @@
android:id="@+id/version_history"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:paddingHorizontal="16dp"
android:background="?android:selectableItemBackground">
android:padding="8dp">
<TextView
android:id="@+id/version_history_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/version_history"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -57,8 +52,7 @@
android:id="@+id/version_history_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/version_history_main" />
@@ -80,17 +74,14 @@
android:id="@+id/credits"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:paddingHorizontal="16dp"
android:background="?android:selectableItemBackground">
android:padding="8dp">
<TextView
android:id="@+id/credits_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/credits"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -100,8 +91,7 @@
android:id="@+id/credits_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/credits_main" />
@@ -123,17 +113,14 @@
android:id="@+id/translate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:paddingHorizontal="16dp"
android:background="?android:selectableItemBackground">
android:padding="8dp">
<TextView
android:id="@+id/translate_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/help_translate_this_app"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -143,8 +130,7 @@
android:id="@+id/translate_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/translate_platform"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
@@ -167,17 +153,14 @@
android:id="@+id/license"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:paddingHorizontal="16dp"
android:background="?android:selectableItemBackground">
android:padding="8dp">
<TextView
android:id="@+id/license_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/license"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -187,8 +170,7 @@
android:id="@+id/license_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/app_license"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
@@ -211,17 +193,14 @@
android:id="@+id/repo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:paddingHorizontal="16dp"
android:background="?android:selectableItemBackground">
android:padding="8dp">
<TextView
android:id="@+id/repo_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/source_repository"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -231,8 +210,7 @@
android:id="@+id/repo_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/on_github"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
@@ -255,17 +233,14 @@
android:id="@+id/privacy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:paddingHorizontal="16dp"
android:background="?android:selectableItemBackground">
android:padding="8dp">
<TextView
android:id="@+id/privacy_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/privacy_policy"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -275,8 +250,7 @@
android:id="@+id/privacy_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/and_data_usage"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
@@ -299,21 +273,17 @@
android:id="@+id/donate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:paddingHorizontal="16dp"
android:background="?android:selectableItemBackground">
android:padding="8dp">
<TextView
android:id="@+id/donate_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/donate"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
@@ -333,17 +303,14 @@
android:id="@+id/rate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:paddingHorizontal="16dp"
android:background="?android:selectableItemBackground">
android:padding="8dp">
<TextView
android:id="@+id/rate_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/rate_this_app"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -353,8 +320,7 @@
android:id="@+id/rate_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/on_google_play"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
@@ -374,20 +340,17 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:padding="8dp"
android:id="@+id/report_error"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:paddingHorizontal="16dp"
android:background="?android:selectableItemBackground">
android:layout_height="wrap_content">
<TextView
android:id="@+id/report_error_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:padding="2dp"
android:text="@string/report_error"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -399,10 +362,9 @@
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/report_error_main"
app:layout_constraintStart_toStartOf="parent"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:textSize="16sp"
android:text="@string/on_github" />
android:text="@string/on_github"
android:padding="2dp"/>
<TextView
android:importantForAccessibility="no"
@@ -417,5 +379,5 @@
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</ScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -31,6 +31,13 @@
android:layout_height="?attr/actionBarSize"
style="?attr/toolbarStyle" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/groups"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
app:tabMode="scrollable" />
</com.google.android.material.appbar.AppBarLayout>

View File

@@ -1,32 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="24dp"
android:layout_marginStart="24dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/textView"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_baseline_archive_24" />
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -9,20 +9,20 @@
tools:showIn="@layout/custom_barcode_scanner">
<LinearLayout
android:id="@+id/camera_error_clickable_area"
android:id="@+id/camera_permission_denied_clickable_area"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/camera_error_icon"
android:id="@+id/camera_permission_denied_icon"
android:layout_width="match_parent"
android:layout_height="84dp"
android:scaleType="fitCenter"
android:src="@drawable/camera_error" />
android:src="@drawable/camera_permission_denied" />
<TextView
android:id="@+id/camera_error_title"
android:id="@+id/camera_permission_denied_title"
style="@style/TextAppearance.Material3.HeadlineLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -30,12 +30,12 @@
android:text="@string/cameraPermissionDeniedTitle" />
<TextView
android:id="@+id/camera_error_message"
android:id="@+id/camera_permission_denied_message"
style="@style/AppTheme.TextView.NoData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/zxing_msg_camera_framework_bug" />
android:text="@string/noCameraPermissionDirectToSystemSetting" />
</LinearLayout>
</RelativeLayout>

View File

@@ -34,8 +34,8 @@
android:padding="@dimen/activity_scanner_padding">
<include
android:id="@+id/camera_error_layout"
layout="@layout/camera_error_layout"
android:id="@+id/camera_permission_denied_layout"
layout="@layout/camera_permission_failed_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"

View File

@@ -7,8 +7,7 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
@@ -18,11 +17,11 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
@@ -128,7 +127,7 @@
android:layout_marginTop="8dp"
android:text="@string/importOptionApplicationButton" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</ScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -6,5 +6,4 @@
android:paddingRight="8dp"
style="@style/Widget.MaterialComponents.Chip.Filter"
app:checkedIconVisible="true"
android:textAppearance="?android:attr/textAppearance"
app:checkedIconTint="?attr/colorOnBackground"/>
android:textAppearance="?android:attr/textAppearance" />

View File

@@ -18,8 +18,7 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
@@ -30,8 +29,7 @@
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent">
android:layout_height="wrap_content">
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -48,10 +46,9 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<ScrollView android:layout_width="fill_parent"
android:layout_height="wrap_content"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -372,110 +369,79 @@
android:visibility="gone"
tools:visibility="visible">
<!-- Front image -->
<LinearLayout
android:id="@+id/frontImageHolder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="false">
android:paddingHorizontal="@dimen/inputPadding"
android:paddingTop="@dimen/inputPadding">
<!-- Front image -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/frontImageHolder"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="5dp"
style="?attr/materialCardViewElevatedStyle">
android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/activity_margin"
android:layout_marginTop="@dimen/activity_margin"
android:layout_marginEnd="@dimen/activity_margin"
android:layout_marginBottom="@dimen/activity_margin"
android:paddingHorizontal="@dimen/inputPadding"
app:cardCornerRadius="4dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/frontImageConstraint"
<ImageView
android:id="@+id/frontImage"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:minHeight="50dp"
android:contentDescription="@string/frontImageDescription"
android:scaleType="fitCenter"
app:srcCompat="@drawable/ic_camera_white"
android:background="?attr/colorPrimary" />
<!-- Back image -->
<ImageView
android:id="@+id/frontImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:minHeight="50dp"
android:contentDescription="@string/backImageDescription"
android:scaleType="fitCenter"
app:srcCompat="@drawable/ic_camera_white"
android:background="?attr/colorPrimary"
app:layout_constraintBottom_toTopOf="@id/frontImageDescription"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/frontImageDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="4dp"
android:text="@string/frontImageDescription"
android:textAppearance="?attr/textAppearanceHeadlineSmall"
android:gravity="center"
app:layout_constraintTop_toBottomOf="@id/frontImage"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
<!-- Back image -->
<LinearLayout
android:id="@+id/backImageHolder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingHorizontal="@dimen/inputPadding"
android:paddingTop="@dimen/inputPadding">
<!-- Back image -->
<com.google.android.material.card.MaterialCardView
android:layout_weight="1"
android:id="@+id/backImageHolder"
android:layout_width="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="5dp"
style="?attr/materialCardViewElevatedStyle">
android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/activity_margin"
android:layout_marginTop="@dimen/activity_margin"
android:layout_marginEnd="@dimen/activity_margin"
android:layout_marginBottom="@dimen/activity_margin"
android:paddingHorizontal="@dimen/inputPadding"
app:cardCornerRadius="4dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/backImageConstraint"
<ImageView
android:id="@+id/backImage"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:minHeight="50dp"
android:contentDescription="@string/backImageDescription"
android:scaleType="fitCenter"
app:srcCompat="@drawable/ic_camera_white"
android:background="?attr/colorPrimary" />
<!-- Back image -->
<ImageView
android:id="@+id/backImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:minHeight="50dp"
android:contentDescription="@string/backImageDescription"
android:scaleType="fitCenter"
app:srcCompat="@drawable/ic_camera_white"
android:background="?attr/colorPrimary"
app:layout_constraintBottom_toTopOf="@id/backImageDescription"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/backImageDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="4dp"
android:text="@string/backImageDescription"
android:textAppearance="?attr/textAppearanceHeadlineSmall"
android:gravity="center"
app:layout_constraintTop_toBottomOf="@id/backImage"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</TableLayout>
</TableLayout>
</androidx.core.widget.NestedScrollView>
</ScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -42,8 +42,12 @@
android:layout_height="match_parent"
android:textStyle="bold"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
app:autoSizeStepGranularity="2sp"
android:gravity="center"
android:padding="20dp" />
android:maxLines="1"
android:layout_margin="20dp" />
<ImageView
android:importantForAccessibility="no"

View File

@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/coordinator_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
@@ -121,7 +123,7 @@
android:layout_weight="1"/>
<TextView
android:id="@+id/main_image_description"
android:id="@+id/card_id_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/text_size_large"

View File

@@ -19,8 +19,7 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
@@ -32,7 +31,6 @@
android:id="@+id/groups"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
app:tabMode="scrollable"
android:visibility="gone"/>

View File

@@ -19,8 +19,7 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"

View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@@ -8,8 +9,7 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"

View File

@@ -8,8 +8,7 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"

View File

@@ -1,67 +0,0 @@
Sylvia van Os
Branden Archer
J. Lavoie
solokot
Allan Nordhøy
Heimen Stoffels
Oğuz Ersen
FC (Fay) Stegerman
StoyanDimitrov
Katharine Chui
SlavekB
mondstern
IllusiveMan196
Altonss
Michael Moroni
Eric
GM
Petr Novák
laralem
大王叫我来巡山
Joel A
Taco
pfaffenrodt
Aayush Gupta
Scrambled777
HudobniVolk
Nyatsuki
Jiri Grönroos
Giovanni Donisi
Priit Jõerüüt
Samantaz Fox
Balázs Meskó
Milo Ivir
Arno-github
Ankit Tiwari
Sergio Paredes
Cliff Heraldo
Jose Delvani
mdvhimself
Milan Šalka
ikanakova
Skrripy
huuhaa
waffshappen
Silvério Santos
ngocanhtve
Quentin PAGÈS
Projjal Moitra
Denis Shilin
Robin Liu
Ziad OUALHADJ
しいたけ
Alexander Ivanov
Viet Nguyen Hoang
Miha Frangež
stavpup
ehrt74
Virginie
Tim Trek
Renko
Michael Gangolf
rudy3
Kim Seohyun
Govind S Nair
Freddo espresso
arshbeerSingh
MisterCosta96

View File

@@ -13,7 +13,6 @@ _id,name,barcodeFormat
015cf86e-c4b6-42b5-abed-5821492b2669,Campbells,ITF
016c8380-d433-4eb1-b7a0-df6fd9254ec6,Friendlies Pharmacy,CODE_128
0189b6a0-3f02-418f-872e-d5e354619a45,Mencke Gartencenter,EAN_8
01b239f4-d1db-4311-a33b-bc8bb9c71c19,McEwan,CODE_128
01ce8326-50e8-4787-9999-e509dfed15cb,Вигода Вопак,CODE_128
01eafcc6-ee41-447f-bbce-7a93ffb90b6c,Mario Mikke,EAN_13
01f88e2d-3eb4-4242-a32b-1a847a28e140,Crodux,CODE_128
@@ -32,7 +31,6 @@ _id,name,barcodeFormat
037f2420-273c-4ffe-9dd3-af22868b1b59,Al Pentolone,EAN_13
038516b8-3cdd-4f96-9582-97caf9dc3a47,Dier Specialist,CODE_39
039784f4-4fef-497e-8f03-f026655394ef,террапевтика,EAN_13
039932ff-caec-4d40-aa9a-0ed185b5cf5f,FNV,CODE_128
03b89b04-69cd-43cf-88eb-35760f092488,Мегаполис,CODE_128
03d62f02-8266-493b-b4fd-95d5c853b87b,мта,EAN_13
03fd0d65-b3dd-427b-9f7c-3554fe3dc99b,Happy Sport,EAN_13
@@ -62,7 +60,6 @@ _id,name,barcodeFormat
0777b427-2af5-4531-81c3-f7421dde9d63,Евразия Автозапчасти,EAN_13
078a5228-818d-4a86-8726-c71dd27a3fdc,EU COVID-19 Certificado de Vacunacion,QR_CODE
078fdcef-2e8a-4179-befe-5959cd588a7e,Клякса,EAN_13
07a90343-0b80-4cb4-8571-b6a2419cff6e,Maracatú,CODE_128
07f645dc-3127-4050-94ac-41f42cacdb74,Cats & Dogs,EAN_8
081924f1-3eff-480a-a8a9-ec08eb4b75e7,Rossetti Market,EAN_13
0821c8d1-4556-4178-af1b-fe4d1977127d,Feedo,CODE_128
@@ -87,14 +84,11 @@ _id,name,barcodeFormat
09e1c670-eac2-4077-8a66-b990c3ba1ed8,Gamble & Brown Cafe,CODE_39
09e38952-3559-4432-821a-84fdee4923f8,Стройка,EAN_13
0a047088-f9f9-47c5-a982-b307122f09fa,IGA Rewards,EAN_13
0a058735-ecfd-4278-ae7a-9f6917193a3d,JBs Power Centre,CODE_128
0a124613-4513-4a4f-b89a-6c4b645e395b,BoniChoix,CODE_128
0a6c06b6-056d-4bf2-ae78-915a8c52d464,волгорост,EAN_13
0a7c000b-39eb-4464-bc41-03d0e1f4a20f,Life Pharmacy ,CODE_128
0ae08429-e2a2-4fe0-840a-e940ce9fd3e5,Zebra,EAN_13
0b2502b7-f8d7-426e-b518-4482ee6115eb,Лоза,EAN_13
0b4c67fb-bf76-46e8-9a3b-cb0acfe47e71,Giocheria,CODE_39
0b539afa-e6b5-42a0-8f03-50d5de9f4af0,MediaMarkt Club Karte,QR_CODE
0b600df8-f694-49d5-b5ee-56d0b47ab1bc,reima,EAN_13
0b82965b-29df-4c9e-ae5f-70a5d10f1d32,Fanølinjen,CODE_128
0bb951c2-c644-4a0b-92c0-754d739a55be,ZALY,EAN_13
@@ -134,9 +128,8 @@ _id,name,barcodeFormat
0f650862-0a1c-4596-b2f9-30fc8d3bf8d3,Lila Bäcker,QR_CODE
0f69ba3f-6084-49a5-b959-24277008de45,CJ Express,CODE_128
0f936e1f-b3ac-4a34-aad7-a18bd76150f2,FOTOLAB,CODE_128
0fafa67a-b4d2-4365-9f68-c167d43c7070,I TOURS,CODE_128
0fce03a0-6b7b-427c-a483-26a1169e73b0,EDMINS,EAN_13
1,Accor Live Limitless,QR_CODE
1,Accor Le Club,QR_CODE
10,Aeroplan,CODE_128
100,Esprit,ITF
1000,Chemmart Pharmacy,CODE_128
@@ -472,7 +465,6 @@ _id,name,barcodeFormat
13,Amavita,EAN_13
130,GNC,UPC_A
1300,IZOD,CODE_128
13004ca8-9095-40c2-aa98-1fcf6410efc7,Max Shop,CODE_128
1301,La Quinta Inns,CODE_128
1302,Pet Supplies Plus,UPC_A
1303,Piazza Italia,EAN_13
@@ -509,8 +501,8 @@ _id,name,barcodeFormat
1331,Bizzbee,QR_CODE
1332,Blue Box,CODE_39
1333,Brice,EAN_13
1334,Tecnomat,GS1_128
1335,Bricomarché,GS1_128
1334,Bricoman,GS1_128
1335,Brico Marché,GS1_128
1336,Camaieu,CODE_128
1337,Casino Supermarchés,EAN_13
1338,Castorama,CODE_128
@@ -688,7 +680,7 @@ _id,name,barcodeFormat
148f7495-e6f2-40b1-80cd-99b3632cb976,Slam,ITF
149,Höffner,ITF
1490,Basko,EAN_13
1491,Unes,CODE_128
1491,Unes,EAN_13
1492,Grande Cinema 3,EAN_13
1493,Eurobrico,EAN_13
1494,Isola dei Tesori,EAN_13
@@ -974,7 +966,7 @@ _id,name,barcodeFormat
172,Jost,ITF
1720,Wheelup,CODE_39
1721,BIG4,CODE_128
1722,Besson Chaussures,CODE_128
1722,Besson Chaussures,EAN_13
1723,Cactus,EAN_13
1724,Idea Bellezza,CODE_39
1725,Uyum,CODE_128
@@ -991,7 +983,7 @@ _id,name,barcodeFormat
1733,Mondial Tissus,EAN_13
1734,Furet du nord,EAN_13
1735,Maxxess,EAN_13
1736,Des Marques et Vous,EAN_13
1736,Devianne,EAN_13
1737,Colruyt,ITF
1738,Paul,EAN_13
1739,JouéClub,EAN_13
@@ -1052,7 +1044,7 @@ _id,name,barcodeFormat
179,Kastner & Öhler,EAN_13
1790,MY SIZE,CODE_39
1791,PetO,CODE_128
1792,Aveve,EAN_13
1792,AVEVE,EAN_13
1793,BIO-Planet,ITF
1794,Brico,EAN_13
1795,Club,CODE_128
@@ -1351,10 +1343,9 @@ _id,name,barcodeFormat
1e43877a-d4f1-4bff-bdb9-cd3346082a46,Scorpion Bay,EAN_13
1e9469a4-8388-4ca9-a463-95ee73a0d953,FAMO,EAN_13
1e9a127a-0451-4565-9560-eaa097d3808b,Grill'd,CODE_128
1ed46ee6-993a-4053-a016-a0d67e26b91b,Lidl,CODE_128
1ed46ee6-993a-4053-a016-a0d67e26b91b,Lidl SK,CODE_128
1f01c3b1-08f7-4365-a0f9-f1c9bcbdf58a,Fresco,CODE_128
1f15d8f3-c35c-46d6-8038-4c9f91a18909,Покров,EAN_8
1f1ec99d-c8c6-42d3-ac6a-b9658a6e0a0d,xBarvy,EAN_13
1f661d7a-d355-4590-8d33-0d61630958cc,NDG,CODE_39
1f6624c6-5acc-4983-ac17-31b9004232d7,Afvalpas Rijssen-Holten,QR_CODE
1f69337f-7604-4e7a-9031-f0ab182e7cd7,Дешёвая Аптека Вита,CODE_128
@@ -1462,7 +1453,7 @@ _id,name,barcodeFormat
2085,Billa,EAN_13
2086,Billa,EAN_13
2087,BIPA,EAN_13
2088,PENNY,EAN_13
2088,Penny,EAN_13
2089,Penny,EAN_13
209,MCard,CODE_128
2090,Shoprite,CODE_128
@@ -1501,7 +1492,6 @@ _id,name,barcodeFormat
2112,Lindex,CODE_128
2113,Twilfit,CODE_128
2114,aClass,CODE_128
21143721-38a4-466f-b04d-a3e90cb62bad,L'angolo,CODE_128
2115,Clas Ohlson,CODE_128
2116,Agrimarket,CODE_128
2117,Starkki,CODE_128
@@ -1610,7 +1600,7 @@ _id,name,barcodeFormat
2201,Avance,CODE_128
2202,berca.be,EAN_13
2203,Brantano,EAN_13
2204,Brooklyn nv,EAN_13
2204,Brooklyn,EAN_13
2205,CAMELEON,CODE_128
2206,Carmi,CODE_39
2207,E5 mode,ITF
@@ -1950,7 +1940,7 @@ _id,name,barcodeFormat
2488,Proximus,CODE_128
2489,RS Bútor,CODE_128
248957ba-dbad-414e-86e4-009fc4e5beee,Самоцветы плюс,ITF
249,Woolworths,CODE_128
249,Countdown,CODE_128
2490,SEIBU PRINCE CLUB,CODE_128
2491,サミット,EAN_13
2492,The PUB,CODE_128
@@ -2034,7 +2024,6 @@ _id,name,barcodeFormat
2557,Artex Fashion,EAN_13
2558,Askot,CODE_128
2559,BUTIK,EAN_8
255d84f7-144d-4d63-b6fd-f00a8e94641f,HUK Autowelt,QR_CODE
256,Palmers,EAN_13
2560,Dayli,EAN_13
2561,De Banier,CODE_128
@@ -2451,7 +2440,6 @@ _id,name,barcodeFormat
28a46b11-8c45-4b2a-93dd-b7325a2fe013,Dialogues,CODE_128
28b5866e-f195-4d68-b8a0-02cdb611af4f,Да Здоров! аптека,EAN_13
28c5ee9a-cf66-4add-b71c-70b66be85570,Agraria,EAN_13
28cc5dc7-61b4-4c95-a5a6-e125cc4bce9b,Aventurx,CODE_128
28d93baa-c331-4df8-a85d-65eb86199732,Solar Studio,CODE_128
28fbdd64-8715-4cdc-8c3f-df7259b1ba65,NOHO,EAN_13
29,Heathrow Rewards,CODE_128
@@ -2594,7 +2582,6 @@ _id,name,barcodeFormat
2b1eb78e-9684-4434-ba9b-41f00fc5beab,Sensation Profumerie,EAN_13
2b29bfc0-26a7-44cb-9d21-2a0bdb467320,Vertex Hotel,ITF
2b39b807-6375-404c-bfd7-7f3135654258,Планета Игрушек,EAN_13
2b6062ec-39b1-4ac4-b6d6-cf19048c9f3f,Coripet,UPC_A
2b6992d5-615a-423a-b196-ab19a418686f,Mimco,CODE_128
2b7d84ce-c573-44ea-8989-b23a13cf389b,Азбука Красоты,EAN_13
2bc9768c-56a2-4d7d-8f1c-0be9f208b71b,Profile,CODE_128
@@ -2865,7 +2852,6 @@ _id,name,barcodeFormat
3199,Navyboot,EAN_13
31d21202-2674-4c42-9a7e-a19b01d32b63,Vegetalis,EAN_13
31d3cf0c-7522-4035-9256-7a712cb1a8b3,Канцелярия,EAN_13
31db4e18-fb97-43d2-b026-c41f39d2faba,Bershka,CODE_128
31eccc6d-babd-4fee-9ae8-db9a00fc1c63,Pharmactiv,EAN_13
31f60f6d-633f-42af-b387-e5d0b4e2f45f,SPINNS,EAN_13
32,Bauking,EAN_13
@@ -3106,7 +3092,6 @@ _id,name,barcodeFormat
3399,Taxi Jetax,CODE_128
339bb076-12fd-4e56-899f-3acb79f5da53,Hafenhotel Meereszeiten,CODE_128
33a430e4-35c7-43e7-98e8-5ce5d039ee70,VPZ,CODE_128
33cb4886-5d06-473a-80b7-980ca2fb27c2,Bouwcenter Nobel,EAN_13
33d16d2d-f51e-44c3-92d8-2c3616af2d0f,Apotheke Peer Farmacia,CODE_128
33dea27e-c7a4-4e40-8621-32da990f7d82,EU COVID-19 Vaccinationsintyg - Andra vaccination Skott,QR_CODE
33e82e4f-5541-4be1-aa4c-0f2987cfd78f,Данди,EAN_13
@@ -3467,7 +3452,6 @@ _id,name,barcodeFormat
37,Bessmann,ITF
370,Virgin Atlantic,CODE_128
3700,Go Auto,CODE_128
37003c25-7bc7-4dd9-8a3a-8406005d0dcf,Scouts en Gidsen Vlaanderen,CODE_128
3701,Good Earth,CODE_128
3702,Hachem,CODE_128
3703,Le Magasin,CODE_128
@@ -3965,7 +3949,6 @@ _id,name,barcodeFormat
4083,Каляев,EAN_13
4084,Shingle Inn,CODE_128
4085,Golden Casket,CODE_128
40853977-7fdb-4815-a64e-85d2c70df347,OROCAJA,CODE_39
4086,Pet City,CODE_128
4087,chempro,EAN_13
4088,merlo,CODE_39
@@ -4330,7 +4313,7 @@ _id,name,barcodeFormat
4387,Kremer,EAN_13
4388,Gartencenter Nickl,EAN_13
4389,Panarottis,QR_CODE
439,Volare ITA airways.,CODE_128
439,Alitalia,CODE_128
4390,Simply Asia,CODE_128
4391,Ultraliquors,CODE_128
4392,Cum Books,CODE_128
@@ -4582,7 +4565,6 @@ _id,name,barcodeFormat
4599,Мокрый Нос,EAN_13
45b55fa2-835b-4ae5-a318-16a66b4ec85b,Євро Мікс,EAN_8
45cbba3f-f0d2-4837-8189-16b0ff2707f5,Барс,CODE_128
45e6b637-a991-45ce-b72d-8f4df03d9f6b,Tradition,CODE_128
45e6f6d3-e688-40f7-86e2-73e3803c86bd,KüstenCard mini/maxi,CODE_128
45fa81a4-657e-414c-89ed-ebf1c49c0926,G'DAY REWARDS,CODE_128
45faf9e5-321c-44a7-b641-7acee8126349,EU COVID-19 Vaccinatiebewijs - Eerste vaccinatieschot,QR_CODE
@@ -4790,7 +4772,6 @@ _id,name,barcodeFormat
4773,Maximiles,CODE_128
4774,La Compagnie des Petits,CODE_128
4775,Totem Family,CODE_128
477515a9-2257-4d19-af18-3dbcfeb4acd9,Omni,CODE_128
4776,La Jardinerie,CODE_128
4777,La Plateforme du Bâtiment,EAN_13
4778,Animal & Co,EAN_13
@@ -5068,7 +5049,6 @@ _id,name,barcodeFormat
4adaa99b-282d-4abe-87c8-b16d3958f4c2,Тюменский ЦУМ,CODE_39
4ae5d40d-45ea-4188-bce8-eb3337733466,Garden Floridea,CODE_128
4b197111-0d79-4ac5-aecd-5dca6643e390,Евродом,EAN_13
4b50787c-052c-48e9-8bae-b01373cef1b8,Fbo Clothing,CODE_128
4b511f9a-5c9c-4b9f-8c71-1631cb78456a,Семейная Аптека,EAN_13
4b8e7174-b85b-4b82-99ab-b1faee2dfb8f,Diper,EAN_13
4ba9de66-0015-49e1-a0d1-d24c2328eaa5,Witchery,EAN_13
@@ -5083,18 +5063,14 @@ _id,name,barcodeFormat
4ccb26a9-3a58-487f-9bdf-5cc4b042c0b3,UNCS,CODE_128
4cd0da27-9a71-4eb0-88f4-23919b598828,Pins,CODE_128
4d28254f-9ec6-4262-aa28-ee0bd7620b00,Леонардо,EAN_13
4d4102e9-115a-4695-b764-c5534e1749a8,twd,EAN_13
4d7b0d6e-2680-4c6b-bdac-8985df7aa8a3,大昌,EAN_13
4d8c62b4-b4c5-40b0-9117-6e5022cf7950,MilleMiglia,CODE_128
4dab7847-f728-4c34-80ea-a464238a3756,Волна,EAN_13
4db2f926-b58d-4821-8f85-b02d3e32fbcb,Дом посуды,EAN_13
4dd50f0e-05a1-4a32-97c2-1e5b570d0d9b,MIA,EAN_13
4dd586bf-d2ed-4357-898c-11b648bcb796,Детский парк,EAN_13
4dd5aa56-2f5c-4bb5-a281-211bb4e5463e,Joylab,CODE_128
4e090085-f5bc-4f29-abcf-bb249dd3429d, SSENSE,CODE_128
4e1001a2-a664-4d37-8b85-a71b02f9f6dc,xFarby,EAN_13
4e24761b-17a7-4b7d-b04a-16f54076d03b,Forum+,EAN_13
4e6622db-6fd3-405e-a60e-7157984da5ba,KiemKracht VZW,CODE_128
4e95cfa4-3011-41c2-ad87-0c560cbd218c,Lincolnshire Co-operative,DATA_MATRIX
4eb5bcd8-9467-44ce-b54c-fc69521431be,Мир Обоев,CODE_128
4ed66bc0-04ee-458b-aac7-6bb7bdd35e5c,Пивотека,CODE_39
@@ -5324,7 +5300,6 @@ _id,name,barcodeFormat
519,Alimerka,CODE_128
5190,Souris Mini,CODE_128
5191,Лакомка,EAN_13
51917108-3469-4067-b1da-8697d60fcfa6,Kingston Frontenac Public Library,CODE_128
5192,AlphaZoo,CODE_128
5193,БИГАМ,EAN_8
5194,Sebastiano,EAN_13
@@ -5431,7 +5406,6 @@ _id,name,barcodeFormat
55cfc40e-469f-485f-ab26-823014fd8401,Seebauer,EAN_13
55db252f-70a8-4da7-b0c2-484c8445e750,Kreativmarkt Hamburg,EAN_13
55e96a49-7157-43cc-aaa7-9867d37cb05f,Народная линия,EAN_13
55eb9a72-cd1d-49f7-aec1-1f44f6207983,Lina Giorgi snc,CODE_39
55f414b7-b1a8-46f6-97ad-7f4f0867d8a9,EU COVID-19 Rokotustodistus - Toinen rokotus laukaus,QR_CODE
56,Brax,CODE_128
560,Punt Roma,CODE_128
@@ -5518,7 +5492,6 @@ _id,name,barcodeFormat
5afc2de6-6129-43f5-9caf-be3572d65a90,Sisal,CODE_128
5b01f59e-97db-4105-9aab-94f56099fc49,real,GS1_128
5b1da0f0-143e-492d-83a9-ad22957a54c6,Metro Lifestyle,CODE_39
5b502f6e-7c38-4708-ae56-04f97638692a,Баня Стил,CODE_128
5bb5ea85-8952-474e-be53-c5ac11f7428f,Farmec,EAN_13
5bb6dc04-3000-475f-a5d4-ba9427989809,Bimbostore Toys Center,EAN_13
5bf3f149-2217-45aa-b61b-eec9aeedf5d2,Werdich,CODE_39
@@ -5536,7 +5509,6 @@ _id,name,barcodeFormat
5d3de23f-b72e-4920-9e3b-1a413979a779,CityCard,CODE_128
5d426084-854e-493e-a10d-7ce5d34d31fe,Farmacie Comunali Firenze,CODE_128
5d51a06c-3af4-4400-9776-e3458190be87,Parisnail,EAN_13
5d5d4520-ee6c-45ea-b5f1-11282a0673f4,Arriva,CODE_128
5d695da3-f47b-4da8-b5ff-ea9d0fd9486b,Belaton,CODE_128
5d866631-9858-4393-a5cf-eba96ca066cc,Kiwisun,CODE_128
5db03921-3703-40d3-ba27-f7d3ff5a40ba,Prodor Supermarché et Boucherie,EAN_13
@@ -5546,7 +5518,6 @@ _id,name,barcodeFormat
5e18e98b-ad75-426a-a4ac-a80496906906,Beauty X,EAN_13
5e27a7ae-ad95-4cce-b383-85a4eb822eaa,Supra Baby,EAN_13
5e402125-50f9-4de9-8769-ce4e0dc1d1a1,Romaest,CODE_128
5e46de16-6ebf-4d17-933f-2f782df8b3fb,Prima Company,CODE_128
5e6edac6-a458-4488-861c-f8f403f4b1e1,MABÙ,QR_CODE
5ee2ee34-5027-4535-a55f-657c1a092d5d,Lady Sharm,CODE_128
5f01e866-3ef8-46e4-a40a-555594849eb7,ЦУМ,CODE_128
@@ -5561,7 +5532,6 @@ _id,name,barcodeFormat
6,ACS,CODE_128
60,Transgourmet,EAN_13
600,Humanic,ITF
60046ae3-b41c-4a08-a012-d8e921e8aab0,Multaparts,CODE_128
600bf563-b7b2-488a-9e21-0ccc63a67b1d,LAUF!,EAN_13
601,Beauty Alliance,CODE_128
6014a435-c656-4bf7-bcd6-fa46ed28bac0,Окраина,EAN_13
@@ -5584,12 +5554,10 @@ _id,name,barcodeFormat
61,Centro,EAN_13
610,CAA,CODE_128
611,Calgary Co-op,EAN_13
6110d522-b979-46ca-a313-ded4eac7db71,Telecomshop Twente,CODE_128
612,Canada Post,CODE_128
613,Canadian Tire,CODE_128
614,Change Lingerie,CODE_39
615,SCENE,CODE_128
615a7629-0f60-4613-b41a-e1f571f5c20a,Goelia,CODE_128
615ddf35-4934-4442-b4df-54b065184476,Сигма,EAN_13
616,Denny's,CODE_128
617,DeSerres,CODE_128
@@ -5641,7 +5609,6 @@ _id,name,barcodeFormat
639,National Car Rental,CODE_39
63ace5b1-39bb-4486-87a8-692caab2c76b,куулклевер,QR_CODE
63ad5b7e-ab54-45f2-9224-2da0122a21eb,Forum TC,EAN_13
63b32bf3-2e99-4487-bc45-7b70132fe53c,Checkers,CODE_128
63bcf094-bbc1-4caa-adfb-b6e015295f43,Парфюм Лидер,EAN_13
63bee835-2e9d-4656-b7b6-4b9e9a024470,Арт-Квартал,EAN_13
63c87418-cb15-4294-a872-035a03da3a62,Belleplant,EAN_13
@@ -5677,7 +5644,7 @@ _id,name,barcodeFormat
657d61fe-7714-4aed-a3d5-6c718c6e9c2a,EU COVID-19 Vaccinationsattest - Første vaccinationsskud,QR_CODE
658,Thrifty Foods,CODE_128
659,Trade Secret,UPC_A
659c40c9-f997-44a8-b6a8-a29df616c4b2,Alfa-Tec,EAN_13
659c40c9-f997-44a8-b6a8-a29df616c4b2, Alfa-Tec,EAN_13
65e6e477-57a3-41c1-88b2-330a6d0cf8bd,Nobis,PDF_417
65e848d6-edd5-401e-9b12-952a5c6fdf47,Джерела Здоров'я,CODE_39
66,BCF,CODE_128
@@ -5685,7 +5652,6 @@ _id,name,barcodeFormat
661,WestJet Rewards,CODE_128
66104d31-9ae9-440d-b316-0d07a4319af3,Farma Fedeltà,CODE_128
662,Würzenbach Drogerie,EAN_13
662e6cc0-3ebe-47db-badf-b31b626ea70c,The Papanui Club,QR_CODE
66335d92-4622-4334-8384-4a6d5f61f239,Zinger,EAN_13
664,American Eagle,ITF
665,TJX Style+,CODE_128
@@ -5730,7 +5696,6 @@ _id,name,barcodeFormat
687,Thai - Royal Orchid Plus,PDF_417
688,SportIT,EAN_13
689,Foster Calzature,EAN_13
68ac6315-08c6-471d-b2e0-ad42d1a091c8,100 Vetrine,UPC_A
68c2495e-937d-4e71-a4ad-85f066df0339,Jardival,EAN_13
68c69327-cce9-4de8-a062-b895c062ee60,Iden,EAN_13
68d4b527-e419-4346-8078-a4ef07a04f00,Lehner Versand,CODE_128
@@ -5764,7 +5729,6 @@ _id,name,barcodeFormat
6a5ac3f8-04cb-4d14-884f-1231b72228e8,Топаз,EAN_13
6a7b1bc8-eca7-4323-9080-68af9414254f,CastoPro,CODE_128
6a85186a-bfd9-4078-a5da-db1b4e1fb526,Molders,CODE_128
6a8a8971-821c-46ce-a638-1a8585c9dedd,Booking.com,CODE_128
6aa89061-d0b5-46a2-9019-b1cb7146e485,Just Plastics,CODE_128
6aa9bd9a-b099-4997-9fa1-b0a7525c6ec7,AZ Casa,EAN_13
6ab113ff-77e9-4029-9b23-e420eda105e3,Ehrmann,CODE_39
@@ -5803,7 +5767,6 @@ _id,name,barcodeFormat
6faff0bd-9236-41f8-9c67-7b546c68085a,BVS,EAN_13
6fb31971-1cf0-468e-9f85-ebf6133ad3aa,у Палыча,CODE_128
6fb45bab-d4be-49fd-8b58-d841110eb0cb,AL 48,EAN_13
6fb4ec1e-c6b7-4597-82a3-5c8d4d69ad4f,Rachelle Béry,CODE_128
6fe38419-76d2-4b5c-983e-6dbed7822d62,GiorgioMare,CODE_128
6fea059e-d9ec-4063-8ea4-cba5ac035942,L'arca di Noè,EAN_8
6ff46a57-e3c9-457e-bfb4-aa922c4c41b4,BENZ,CODE_128
@@ -5892,7 +5855,6 @@ _id,name,barcodeFormat
740308f3-fda8-4b83-9d86-d13592ef30ab,Dress Code,EAN_13
741,O'STIN,EAN_13
74135c63-c1ab-47b8-8d99-4d9dcf602eda,VOIX INTERIORS,CODE_128
7415ddc5-3d77-410c-a6f8-ab399518a82c,Tradition,CODE_128
742,Reebok,CODE_128
742069df-a468-45d5-8cf6-cc152b4aefaf,Bacher Garten-Center,EAN_13
743,Savage,CODE_128
@@ -5940,7 +5902,6 @@ _id,name,barcodeFormat
764,Васаби,CODE_128
7648aaa6-671e-4396-9e4e-759aa66c9f4f,Bouwcenter,EAN_13
7649e44e-66e4-4af1-a913-87a40c8ae739,Office Centre,CODE_128
764a67a4-8087-41d1-b53a-d73b8380d5cf,Handy Home,CODE_128
765,Вестер,CODE_128
766,Виктория,EAN_13
767,Газпром АЗС,EAN_13
@@ -5973,7 +5934,6 @@ _id,name,barcodeFormat
780bd58f-acbb-493c-869d-63f7a93292f3,Schnitz,CODE_128
781,Кофе Хауз,CODE_128
782,Красный Куб,CODE_128
78242148-6c07-4698-9ec1-56017dc687b6,Ideacasa Mercatone,EAN_13
782b0597-f7e4-4509-ba4b-a9fc35d72b4d,Рада,EAN_13
782f7353-ec4c-49a8-9aac-1f7d28f4cab2,Remix Moda,EAN_13
783,Лукойл / Ликард,CODE_128
@@ -6028,7 +5988,7 @@ _id,name,barcodeFormat
7bd30784-434b-4d73-8dc1-5b5516723eda,Pascal Coste,EAN_13
7bd61c87-b62d-439a-92e9-cc435345cb53,Infinity Fashion,CODE_39
7c138f2e-37f9-46d4-ac65-2b20ff90a629,Nai Harn Gym,CODE_39
7c1b39b5-b938-432e-b0be-3c196320bd37,Checkers,CODE_128
7c1b39b5-b938-432e-b0be-3c196320bd37,Checkers,QR_CODE
7c5a9dd0-28b0-4be1-b53f-cac4246990b4,Марафон Обувь,CODE_128
7c60823a-e9fc-447f-811d-589bf1f95342,Пчёлка маркет,UPC_A
7c77ce3b-02ad-436b-a4aa-62a6d5d583e3,Plainview-Old Bethpage Public Library,CODABAR
@@ -6044,7 +6004,6 @@ _id,name,barcodeFormat
7ce87cdb-4c6b-437f-a693-dca518f7436a,Yo-get-it,CODE_39
7d02542c-fac0-45b5-bc90-d74240715c56,Travis Perkins,CODE_128
7d11f040-b0a2-4109-bdf1-25711d48d451,Consorzio Infarmacia,EAN_13
7d168ca5-9370-47bd-ac3e-bf1e1e26f1ec,RISPAWORLD,CODE_128
7d41888d-cd7d-42ef-bf93-9aeda5ae13f6,Kepro,EAN_13
7d4345b8-448b-4e12-a1c5-c6e031de2352,Nove25,CODE_128
7d520d1c-611e-4e81-9937-41a9828e6b08,EU COVID-19 Vaccinatiebewijs,QR_CODE
@@ -6055,7 +6014,6 @@ _id,name,barcodeFormat
7da65ee3-d140-469c-b3ee-217272ac98d4,Kippie,QR_CODE
7db0f727-13b4-48c1-8618-550155a878a2,Imperial Games,CODE_128
7db8a067-1c33-4cd9-9706-31a2592f719a,милый дом,GS1_128
7dd14421-2fe6-494f-889b-dd8920f61091,Mastro Tortello,QR_CODE
7dd1b9ca-2a5b-4f3c-8c10-8bc216ff5d2f,Sokolov Jewelry,CODE_128
7df2728d-3dc9-4724-8756-965e937674e2,Marriott Bonvoy,QR_CODE
7e3da299-047b-4981-8ff3-e5355c7289b2,GIROPHARM ,EAN_13
@@ -6082,7 +6040,6 @@ _id,name,barcodeFormat
8045996b-082d-4333-b631-54dc992ebef0,Coop,EAN_13
805,Старик Хоттабыч,CODE_128
806,Stockmann,CODE_128
8069f84c-3b04-4b0a-87fd-d89230547e8b,Happy Pets,QR_CODE
807,Сток-центр,EAN_13
8070cf0a-9721-4fe7-b010-6fdca61349fc,Epping Plaza Hotel,CODE_128
8077e001-6db6-4796-bd82-6716ea5e116e,Palace Cinemas,CODE_39
@@ -6104,7 +6061,6 @@ _id,name,barcodeFormat
813f818a-e99d-49f2-af6e-653a9bcaab09,Bazar Avenue,EAN_13
814,ФотоПлюс,CODE_128
815,ЦентрОбувь,EAN_13
8153abb1-248f-4af9-a7f8-dd83cdacdc7f,TEKBIR MARKET,CODE_128
816,ЭКОНИКА,EAN_13
8166ded7-42b6-47b8-a5dc-032954e82db7,bugatti,EAN_13
817,Эстель Адони,EAN_13
@@ -6115,7 +6071,7 @@ _id,name,barcodeFormat
81c5ea7b-aa89-47f8-a22e-297207616f0b,Taurus Sports,CODE_128
81dd0d8d-4613-400e-8cbd-b2189a88a22d,EULIVIA Apartments,CODE_128
81e7b9b8-826c-4f9e-9c61-7568a454afa5,Industriya Krasoty,EAN_13
82,Desigual,QR_CODE
82,Desigual,CODE_39
820,Air Miles,EAN_13
820b5de7-a25a-4d30-ac74-3a70fe682bfd,Мир Электроники,CODE_128
821,Ajax Amsterdam,CODE_128
@@ -6179,7 +6135,6 @@ _id,name,barcodeFormat
848,Lake Side,ITF
848939e3-7e55-40af-a46a-a0b0b434bbcf,Планета ZOO,EAN_13
849,Le Ballon,ITF
8495d3db-8532-4bef-a58f-3a77479ff134,C&A,CODE_128
84a82d8b-1d4f-4673-b1e2-b115bbe5b618,Soul Origin,CODE_128
84faf272-0010-4f93-8aa1-154caaa11ac2,Pro-Duo Nur für Profis,EAN_8
85,Diamond Club,CODE_128
@@ -6239,7 +6194,6 @@ _id,name,barcodeFormat
87737e38-8052-4fdc-a90a-3511b9157481,PETS&CO,CODE_128
878,Jula,CODE_39
879,KappAhl,CODE_128
879a9dd3-45e3-4633-9376-9183fee6ab3e,Bernardis Marketplace,CODE_128
87b3f071-9af7-4163-b512-679717b696ac,Caucciu,EAN_13
87b925d1-4d9a-47e3-9e54-deaef1981b77,Impfausweis,QR_CODE
87d141a6-cac3-4d39-9357-a6365850e57f,Coeur de frais,CODE_128
@@ -6293,14 +6247,13 @@ _id,name,barcodeFormat
8a0dca6e-de83-4e48-a42d-a3009da56653,Park 'N Fly,CODE_39
8a25357e-ebc3-4ae1-b7fc-a10ff3b1abd0,Конфил,CODE_128
8a53dffe-df27-40f0-b2ff-58e53add0b3e,La Cartissima,EAN_13
8a59226e-9895-4924-8616-345549a56aec,Munhowen Drinx,CODE_128
8a702666-368b-48a5-96fd-4e10aac5ae7f,Brooklyn Jeans,ITF
8a8095fe-f449-4242-83a1-0d3055874233,Little Sparrow,CODE_128
8a9c58f4-4db3-4aef-8cf0-d2caa0fcc4d1,EU COVID-19 Potrdilo o cepljenju,QR_CODE
8aa58d48-ad60-4b6d-aa1d-054f94b6453b,Granola,PDF_417
8ac5093b-8fc4-49d6-b271-dd845252b60c,Idea Verde Maschi,CODE_128
8ad83ece-2e55-4937-80c9-04584c598439,COM,EAN_13
8b0f2db1-ae97-4af8-8e82-c4067a4ac322,Ma Toyota Extra,CODE_128
8b0f2db1-ae97-4af8-8e82-c4067a4ac322,Toyota,CODE_128
8b398aea-e5bd-484d-bdf2-5030bacf9157,Thèoria Milano,CODE_128
8b4c413c-effc-4912-9a34-6baea2972199,Karla,CODE_39
8b653178-4f49-4f73-9091-7763e039b539,Aléa Déco,CODE_128
@@ -6351,7 +6304,6 @@ _id,name,barcodeFormat
903,W.KRUK,CODE_128
904,Galeria Wileńska,UPC_A
905,YES,EAN_13
90574104-b485-489f-9872-3d32b7e07c59,America Today,CODE_128
906,ZiKO Klub,EAN_13
9062c2a3-eeb1-4797-afb6-41a0394bb481,Městská knihovna - Česká Třebová,EAN_13
90705634-f152-487c-97eb-27e1728285ef,Миртек,EAN_13
@@ -6380,7 +6332,6 @@ _id,name,barcodeFormat
91915513-4447-47b0-93ae-d489f6ee3a97,Chrome,EAN_8
92,Düsseldorf International,EAN_13
920,Drummond Golf,CODE_39
92063e91-526a-4327-ba87-f487bfaec724,Rue du Commerce,CODE_128
920c9bd0-d85c-42c6-9301-fc1ddedd38c2,Idea Casa,CODE_128
920ce49c-9728-41f1-b9e9-9f9d06f53d92,Русские Самоцветы,EAN_13
921,NWZ,EAN_13
@@ -6417,13 +6368,11 @@ _id,name,barcodeFormat
935ef7c3-a93c-43e1-9abd-075bd05c3051,Форне,EAN_13
936,Orlen - Vitay,CODE_128
937,Wojas,EAN_13
937cef67-4a01-42fc-9f51-0a3f3210a686,Idea Città Company,GS1_128
938,Sizeer,CODE_128
939,T2 Tea,CODE_128
93a8cca4-73cd-405c-8142-359a41127416,しまむらグループ,CODE_128
93a9836f-0984-45ee-97c6-3e6675a34b11,Ludwig Beck,QR_CODE
93b76ad4-76f3-4132-8fe5-972f6ca5eb8a,Київфарм,EAN_13
93bda8ac-884e-4db0-ab72-09e12f86a3d2,Naturino Family Store,CODE_39
93c53a6b-2efb-4167-aa67-c4905f1692b1,ВелоДрайв,EAN_13
93d1d2d1-801d-4293-a1f1-cdf314ba341a,Nilufar,EAN_13
93d42408-df2a-42fd-a10c-9f9c725e8000,TuttintiMO,UPC_A
@@ -6471,7 +6420,6 @@ _id,name,barcodeFormat
962,Монро,EAN_13
963,Jeans Symphony,EAN_13
9630a33b-0869-4246-91db-80f928bd7b3a,Harfa Sport,EAN_13
96394b6b-b91f-4fbd-991c-242b7189e0b0,Shoprite,CODE_128
963a19ff-687c-434a-a960-c5e9c6d27c1c,La Cage,CODE_128
964,Спектр,EAN_13
964bee1b-84ac-42cb-ac20-b182e043a983,SIR,CODE_39
@@ -6521,7 +6469,6 @@ _id,name,barcodeFormat
989,Toys Center,EAN_13
98959593-9b79-4d3a-98bf-fd965d99825e,ташир пицца,PDF_417
98afc021-2350-4686-89de-03bc9bb686a4,Coeliac Australia,EAN_13
98c597ea-20b1-4d9e-a6ae-0ed84e0f591d,Juttu,CODE_128
98d5694e-ee5e-4f60-9a32-0ac43d66f54f,Vaprio,CODE_128
99,Ernsting's Family,ITF
990,Nando's,CODE_128
@@ -6583,7 +6530,6 @@ _id,name,barcodeFormat
9dc29233-9613-4851-8630-15b7b39222c3,Kasztelan,CODE_128
9dc3174d-0990-4d88-a4d6-3c7a6431160d,Янтарь,EAN_13
9dc63493-8062-498a-99be-db701dfc03a4,Farmacia,CODE_128
9dd46ad3-336b-4af2-9cbc-4526140558ef,Kiriel,EAN_13
9e02cf7a-da20-428d-a363-952f7a3fb25c,Kéddo,EAN_13
9e82e20d-4da0-46c0-bb94-c2ba7b9b3d74,Индустрия красоты,EAN_13
9ec73fed-0974-4b7c-98e0-27aba810e8e1,Spielwarentraum,CODE_128
@@ -6595,7 +6541,6 @@ _id,name,barcodeFormat
9fd0773f-f0ee-476c-8351-c02fb65b9360,Plus Market,EAN_13
a00761f0-abf1-4690-a95a-b18e41c527d2,Pet and Pool,CODE_128
a017f67b-3483-4587-97a0-2c5c4af6834e,SchuhMarke,CODE_128
a0284158-4eaf-4891-9768-f93e1049413a,Десятка,EAN_13
a04e9cdb-caec-4f4f-bf96-9e40fd90cb09,PharmaSave,CODE_128
a05edd71-80dd-4e23-87cf-5df65a193281,Andre Tan,EAN_13
a08ccd9d-76ce-4245-8582-24d2840ff7b9,Chanel,CODABAR
@@ -6617,7 +6562,6 @@ a238f465-ff8e-4077-b5fe-a1f250ed90d9,BJ's Wholesale,UPC_A
a2756aea-2ca4-4870-811e-100871fdb73e,Pratiko,EAN_13
a29668f6-dd2e-4281-917e-49e28ebff6a1,Koloria,CODE_128
a2b352d9-5d5d-4080-9f52-eb6a798aa6c6,Ferlenz,CODE_128
a322cee9-b5c6-4384-a365-c970f335cc5c,Erdkorn,QR_CODE
a323e0ec-2b0b-4a82-a950-11f7516f2584,OnePass,EAN_13
a36556e0-433a-4b16-b72c-4751a386d707,EU COVID-19 Impfzertifikat - Erstimpfung,QR_CODE
a3828047-ff01-4eb4-be10-6e4d635ca029,Leffers,ITF
@@ -6646,7 +6590,6 @@ a6060858-7d83-4f60-8318-b80635013f45,Detershop,EAN_13
a645973d-7e87-46ab-8c77-0380ca06ae32,Perth Zoo,CODE_39
a65e3023-fa06-47c0-bfdc-4dc79f54c825,丁丁藥局,EAN_13
a69154f5-16a8-4543-bb49-b7a68bb3d301,EU COVID-19 Potvrda o cijepljenju,QR_CODE
a69d8b79-a0e7-422b-a149-64c66b23aea4,Plus More,CODE_128
a6aa66ba-00b8-4922-b628-98cea029c9e2,Coop,EAN_13
a6ab3df9-10bc-47df-bed4-839fe1e908be,零食物語,CODE_128
a6b2c527-afbc-4e71-ae24-e5e5e270d474,Pappert,PDF_417
@@ -6656,7 +6599,6 @@ a7634961-1509-4902-9b25-714ef789e926,2HB,EAN_13
a78ee36a-3682-404f-9c83-307c1a6b421e,Moda Lina,EAN_13
a79b9a92-9821-4824-978e-1a257abfbaff,Wormland,CODE_128
a7b3e795-4746-45a4-9c80-d331fb051632,BonBon,EAN_13
a7e263c3-75fd-4ac2-98ea-0e7b3e425a74,SUPEREFECTIVO,CODE_39
a7f1c8c5-2895-4a74-98ac-9740e7c59922,Coffeelat,QR_CODE
a8090907-7e2e-4038-8831-0c72adaa0664,US FashionStore,EAN_13
a83b00dc-1bfd-41b6-9fee-3c7f5d33fef5,Baden,EAN_13
@@ -6686,7 +6628,6 @@ aaa82398-d78f-46d6-bfb5-a40843e94cc8,CLEVER WEAR,EAN_13
aabf2ea4-170c-42e4-906b-ea1253ebf580,Родные масла,EAN_13
aac03de2-6c97-4bd9-8d72-a7bba15bea6d,La capsuleria,EAN_13
aae4f87d-ee8c-4ff0-9cb2-88c478b7a0dc,Bonjour,EAN_13
aae6aab3-e5fb-47c1-b6c1-c30c3f386793,Netto,CODE_128
aaf65c10-a78e-4b18-8c79-371d5cdef871,La Provençale,CODE_39
ab0c09c4-d1cc-40a4-8b46-f101dc376655,Trade group SMIT,CODE_128
ab0c5857-5b3d-4ac3-8910-ec6b8c49a0dc,Three,EAN_13
@@ -6695,7 +6636,6 @@ ab245924-7af0-4996-84a2-f19a6b6a62fa,Hollister,CODE_128
ab37459c-4368-4684-9ffa-3ac84c69e87a,ДомДоктор,EAN_13
ab4a36d9-9a11-4575-a6cb-1bd053c6e00f,СБА,CODE_128
ab6de5de-ea68-47d6-87ad-884e63f63f48,EU COVID-19 Удостоверение за ваксинация - Първа ваксинация,QR_CODE
ab73cd57-b075-425f-afe6-868e56207a42,Rewe,QR_CODE
ab7a0e82-ad67-40fb-a85f-83cdd10fb44a,Depot,QR_CODE
ab9d5459-25c3-4040-bff0-b7804375065f,Забіяка,CODE_128
aba38815-1a55-456f-84b6-0321d8d34102,Андреич,EAN_13
@@ -6736,13 +6676,11 @@ b000bec7-fe1d-4a01-8134-7e93c72fcf2c,фаэтон,EAN_13
b00fc66a-460d-43c9-a5f1-86b0a92b125a,Дачник,CODE_128
b0210273-794f-427b-bba1-c940a7aac7df,Helen,CODE_39
b0382f02-57d7-4d7a-a3f1-25ea85507c64,Laser Game Evolution,CODE_128
b059eafb-017b-49f0-9d74-62889d8ee777,City of Whitehorse,CODE_128
b063caac-e875-4475-8ae6-09a0f979fb85,CLUB SALUTE,CODE_39
b07244fc-81d3-492b-a9e5-a813a57eea9c,Faciba,EAN_8
b07e5b4d-d658-4ba6-9305-d497af7a19ae,Nijhof Schoenen,ITF
b086ef99-b8b8-45a9-80f5-33a4cb01aba8,spudshed,CODE_128
b0973d67-75d0-45e3-9f17-0f4cb80a4824,Motozem,CODE_128
b0cfcd52-01a5-4533-8970-6e402e52bcb0,Brikon,UPC_A
b0e24b5a-4034-44b9-b22b-2a008d0bcde5,Eurodì,CODE_128
b0efcdb1-872a-44f0-961a-a97ee45c7ba8,Porsche Group,QR_CODE
b0f4291f-8d68-4071-8d10-cc212b4495cc,Iper d'Oriente,EAN_13
@@ -6769,14 +6707,12 @@ b2ab5d25-1981-4120-be54-86ccda399861,Vitulano,UPC_A
b2b50b52-83c6-43d3-bb13-008544e2cfa5,Turčianska knižnica,EAN_13
b2b7d24b-fdbc-468b-be59-b189d4d5fdf9,Het Certificaat B.V.,QR_CODE
b2c03313-9621-4233-9b61-5faa8d2c66e0,JILL STUART,EAN_13
b2e520a4-c21a-4ba0-822b-c9ac5fe79f4d,BLUME2000,QR_CODE
b2f90e3a-4669-4cd4-8c31-65fbb91dc26e,Advantage Pharmacy,CODE_128
b31982e9-7c22-4e92-8210-e08eaa123727,Linberg,EAN_13
b334927e-9574-457c-9a1f-1b7dd5928304,Farmanoi,CODE_128
b359db35-9be6-4369-b796-04b47b4044be,Signorizza,EAN_13
b36ae43e-8a9c-41f7-8c54-d5ae673c94f5,Bio&Co,EAN_13
b43d0b6b-db53-44a7-b518-30cace59c222,British Garden Centres,CODE_39
b4606b36-853e-4014-9524-fc07fa6e1d4a,Cantina Rauscedo,EAN_13
b4663d4f-dd9f-43cc-ba0e-4ce9b0beccd2,Пивлавка,EAN_13
b4725b6c-105f-4898-a8d5-ba426ddf9508,Yamazaki,CODE_128
b472df21-8f40-44ff-a11f-bbe1d76d6d58,Company Shop Group,CODE_39
@@ -6784,11 +6720,9 @@ b497667e-0c92-4db6-9579-63bbe35af881,Праздничный,QR_CODE
b4b5583a-3d0e-458e-b800-3b43968a8421,Pirex,CODE_128
b4c412d7-ad0b-4afd-aed8-0cf113f445ca,Аквафор,CODE_128
b4e4e61f-8605-45b6-b672-fce67898ba4e,Schuhkay,EAN_8
b4f37441-b068-443f-bbfb-fca23c9f5eec,Tuttigiorni,EAN_13
b4f4c3c3-4ad3-4431-9048-1d6b0e47a649,Tezenis,CODE_128
b52836be-a999-4bf8-ba0b-5f2b9b96a509,Youth Hostels Luxembourg,CODE_128
b54963ea-a217-434b-b0fa-e8114fd6b999,Пинта,EAN_13
b54ed01d-e46b-4f24-8ce9-e08f624f2ddb,IGA,CODE_128
b5656988-55fb-46c8-91ab-24a5b8422549,Moja Starówka,CODE_128
b5695b84-a5cf-4286-87ab-afbe9368be1f,Tulipes,CODE_39
b5dc4188-75d6-4cf1-b7f2-b0e85a57bc9a,Boulangeries Maison Toulorge,CODE_128
@@ -6823,7 +6757,6 @@ b9c4e2bd-88ee-4345-b0c4-3828e076637c,Pro-Duo Exclusief Professionals,EAN_8
b9f36613-ed74-441e-abce-66d465b83594,Accademia Italiana della Cucina,CODE_39
b9f3eacc-e6d9-43e2-93f0-a1e63221b1fe,Più Medical,CODE_128
b9fc9d9a-da0e-4fe2-82d8-5d6672263b4b,Kačka,CODE_128
ba063e76-f5be-4e98-a549-7040a825caf7,Trendevice,CODE_128
ba0d23c2-0030-4b68-9bec-6daf6c0db596,Zoomarket,CODE_128
ba119be5-7382-453c-93be-625c555aec84,Vitaminas,CODE_128
ba5aca20-b0fd-417d-8739-ba9b347c8fff,Клиника ЛМС,CODE_128
@@ -6889,7 +6822,6 @@ bfbe8661-ae7a-4338-bb37-fde8cd6c57a1,Хмель и Солод,EAN_13
bfcd1bbc-3671-4a2b-99d4-8195c5246644,Metalmark,EAN_13
bfe5aac8-ea2d-41e0-ba15-af949e5437d7,Каприз,EAN_13
bff24292-b2e3-4322-9462-d5ecc80ce044,Halfords Motoring Club,QR_CODE
bricoman-it,Bricoman,CODE_128
c03f0f47-ce09-4bf1-95f8-c1d0c6f1a8ca,Coop,EAN_13
c043ef0e-49a9-4f10-877f-974247cf0f16,IperBiobottega,EAN_13
c0712c54-a6a6-4695-b9ba-4f5a296b66cf,Apothical,EAN_13
@@ -6939,7 +6871,6 @@ c51b31d2-056b-41a0-9347-c4d02375df01,офисмаг,EAN_13
c51c692c-9e90-48fb-9047-38d3bb7fec2d,Мясницкий Ряд,CODE_128
c53f804f-29e6-4dc0-9f66-0b9b016cdade,Möbel Borst,CODE_39
c54a0027-fd79-457e-80eb-e73e1332e3e9,Ni Hao,CODE_128
c57001e2-db2b-4f15-8c49-29c6502a86e8,Underwood Meat Company,CODE_39
c5846a8f-687a-4de9-a5b5-b575488ac84b,Radhe Wholesale & Retail,EAN_13
c59fc214-7895-40fc-8f94-9d1d800b66d2,Conradt,CODE_39
c5acc06c-0b7d-4e4d-bee3-2134e2fb3b9c,Belles Fleurs,EAN_13
@@ -6979,7 +6910,6 @@ c9231cc7-92f2-447c-ad84-8d167c23e9cd,Zwitserse Apotheek,CODE_128
c925f293-54ee-47ba-ba48-792945c5fa94,Смайл,UPC_A
c9295edb-4acf-4e21-b931-d07d1b97e9be,Weingärtner Gartencenter,EAN_13
c935a5b9-03f1-4194-8aa2-39545b376065,Alpina Intimo,CODE_39
c94a90ff-4118-4310-bcf2-588463110b83,knihovna Rosice,CODE_128
c964ff0f-5ac9-4976-967f-a55c7ec72e14,Mega Pet Warehouse,CODE_128
c998f7d2-6403-46c5-ba21-270195e61cd3,MAX & Co,EAN_13
c9d387cb-7a0f-492f-a18d-f4d559ccbade,Информат,EAN_13
@@ -6991,13 +6921,10 @@ ca4944a1-3892-4803-8b04-b72cd996511f,Diadema,CODE_128
ca650de4-55cc-4df6-8994-3378274bebf5,Moby Dick,CODE_128
caa55951-513c-4dca-b0bc-3cb80d85e4f2,PANORAMICO,EAN_13
cab2ae0e-10bc-4c58-b159-59f4e8566ca7,Hawkesbury Library Service,CODE_39
cad853d8-b9fa-43d6-b37d-39274a571269,Harmony Beauty,EAN_8
caddfc56-1d2a-454c-bece-1516b13fa249,Millstream,EAN_13
cae4d233-caae-43ff-aaba-affdc99c2d98,ALTERNATURA d.o.o.,EAN_13
cae69560-d7e6-4cb7-9ac5-95199c15f9cc,Blumenmarkt Dietrich,CODE_128
caff4297-2ae6-4315-9329-614c8510eb7f,Вместе Выгодно,CODE_128
cb03988e-5063-4f48-aef2-9f959f9771a2,DVV,CODE_128
cb12d304-17dc-45ba-be1c-5602237320ce,Vero Moda,QR_CODE
cb1f1114-d1ea-4987-badc-7194d1ab1ca8,Zahradní Centrum,CODE_128
cb4ead90-a2f7-41ba-80eb-d4970bed83bd,A-Kaart,CODABAR
cb7b9237-0c2d-437a-ba38-fa6decca977e,萊爾富,CODE_128
@@ -7020,7 +6947,6 @@ cd121cb8-988c-454f-a4ac-10365bf4aa6c,Shop Santé,CODE_128
cd26930f-c1ac-4543-a23c-0b90cfa0b1f7,36.6 Здоровье,EAN_13
cd38f71a-1a0a-4ba7-ac1d-43974fd42e1a,Gel Market,EAN_13
cd73cbfb-68f5-4d67-9411-310695558c6b,NKC,CODE_128
cd840f28-f17c-44ed-9ec7-15b48aa2f0e1,Knihovna Matěje Josefa Sychry,EAN_13
cd9d6482-a7dd-4283-a776-f0982ade57a5,Biraghi,EAN_13
cdd777ae-6fa4-458d-b7e5-f7c18fff857a,EU COVID-19 Vaccinationsintyg,QR_CODE
cdd87d70-3e73-48a2-a88a-5e1083e41d0a,1000 мелочей,EAN_13
@@ -7042,9 +6968,7 @@ cf4f5874-aef4-492c-ae9c-b47cb2f14224,Jardinerie Loiseau,EAN_13
cfce4667-ff5d-44f0-8ba7-fbc44bbf2cb5,Orange Club,CODE_128
cfd15fb5-1bac-455b-a5f7-b808390fba06,Сакура Суши,EAN_8
cff8ca3d-3620-4098-9b8b-e181f84f6ec8,365,CODE_128
d0153291-afc6-4d0f-8120-74c0b321434a,SA Guild of Actors,CODE_128
d0540b51-9716-4d59-bc2f-1582b044c029,Wedding Price Card,CODE_128
d05b520c-091a-4a9b-84de-689484927109,Lotto Niedersachsen,DATA_MATRIX
d0a04b4f-df54-4fcd-b410-87ea5d0986aa,EU COVID-19 Očkovací preukaz - Záber na prvé očkovanie,QR_CODE
d0b9a6b8-f724-4fe7-8195-e810297505af,Chocolaterie Albèrt,EAN_13
d1018675-b1b2-44bc-91b6-a985d744836f,La Sirena,EAN_13
@@ -7080,7 +7004,6 @@ d403852e-7683-49f0-9de5-6e1ec5ac842d,Andreas,CODE_128
d4115422-7d2e-4001-9c49-4c1353c8b88d,Secom,EAN_13
d44c1355-2941-4393-aeb8-1a7ad7122f67,HUALI MARKET,EAN_13
d4502068-af6b-43ab-b9a5-46dc1899e22a,Ябко,EAN_13
d4517693-3f1c-45a6-86f2-d60ad19d04e9,U Baristu,QR_CODE
d4934c41-3cae-40dd-bd5c-2ca88bdcf9f5,Bau-Buy,EAN_8
d4b67cb7-cfbf-4bac-8711-2088b8592e5f,Wara,EAN_13
d4e44512-0ac2-4d1f-8603-01cd0497416c,The co-operative,CODE_128
@@ -7111,7 +7034,6 @@ d6eb202f-ba2f-4253-8f5d-1dce44d13bef,Канцлер,EAN_13
d71e4888-dd0b-4aac-ae5b-937b17ee4149,FQCC,EAN_13
d7893d3c-c704-4daa-955b-a97f061d0138,ВАБИ САБИ,CODE_128
d78fc335-cab2-40d7-a56c-333f568b36b4,социалочка,EAN_13
d7959c14-98b1-4187-9088-494d1a7c5f9f,Canningvale,CODE_128
d79a1500-206d-407a-b111-724b898aa154,Sportsman's Warehouse,CODE_39
d7a18a8f-32b5-43f5-8290-5caf4297aaf8,Halfords Colleague Discount,CODE_128
d7b8deb4-4006-4223-9600-331458fade3d,Пиватерра,EAN_13
@@ -7178,7 +7100,6 @@ dema-be,DEMA,EAN_13
df2f73ec-a3c1-4169-b47e-4742bcab704d,Digizenz,QR_CODE
df3228e8-78d0-42c7-8e45-30089e5267ea,Эдисон,EAN_13
df53a52a-320b-41ce-8ca0-92da86fcae0c,Koutný spol,CODE_93
df5ad302-ae2d-47db-b9c9-b5e030d3b553,ALDI,CODE_128
df62dc4f-b31a-4615-a289-94410da0ce7b,Melkior,CODE_128
df668825-ed7c-4f05-b74b-47ec6daa69f0,Breakers,CODE_39
dfc5ba69-483e-46ab-8951-3afc7c6d7460,Chaussexpo,CODE_128
@@ -7191,7 +7112,6 @@ e0491f99-5f5b-4bfa-bb1d-f7cfe688ca26,Хмельная Миля,CODE_128
e0663514-cb9c-413a-ad94-8b83dde796f8,Hommy,EAN_13
e0b022eb-bc2b-4553-8345-5869e4f644e2,Life 2.0,CODE_39
e0b2fcbb-e302-4a5e-aa4b-3991fcee7831,KanclerCom,EAN_13
e0d0863f-c345-4e3d-baf7-853414056795,Sport 2000,EAN_13
e0db8778-d9a2-4b6c-bece-1b2c4bef11c0,Everyone Fitness,CODE_39
e0eadec9-539e-4316-b9bd-9e29d59c1abb,Containers for change,CODE_128
e132948b-f6a2-44cb-b0c1-d9366151a0e2, BSTRONG,CODE_128
@@ -7226,13 +7146,11 @@ e435e3ee-a81f-40f8-86be-2def0a610ac1,Спорт-Марафон,EAN_13
e4561f48-5c68-4c2e-88ea-7eeb531a8b41,Lubo,CODE_128
e456ceeb-d76a-4684-9e2a-54935e77daa5,Tendenze Calzature,EAN_13
e4dfacd9-9513-4231-b09b-51af53151edd,Дворик,EAN_13
e4f5270b-5a69-41a3-a39e-e3e7e4460ddd,OSCARwash,QR_CODE
e4f54b47-0238-4fd6-9109-d5ce424981c6,Фламинго,EAN_13
e5059f27-dc93-4296-b4d5-1162b692c5ec,Северная Звезда,CODE_128
e550a9a1-c25b-4658-a9fa-38764c584693,Mon Grand Plaisir,QR_CODE
e55b3ee0-ac34-480c-8fd3-c63c3a6ae28c,Муниципальная Аптека,EAN_13
e55f98ef-9258-4eb7-97fb-7e97d2aacdaa,COOK Kitchen,QR_CODE
e5616ded-48e7-45d7-b706-a82ef5ab9667,OROCASH,CODE_39
e569e534-de02-4cde-a15e-ee5f3e70794e,Partyland,CODE_128
e570f1ac-a109-4473-8644-9b6daf701d8d,najlepšia lekáreň,CODE_128
e580263e-726d-4768-a756-1cec4966dbb6,Lower Plenty Hotel,CODE_128
@@ -7245,12 +7163,10 @@ e6b0d8c0-2e2b-4d2c-9c3d-4420ced94877,Багира,EAN_13
e6b4a59b-4d9a-42c6-aae3-5baf468c1999,Evolution,EAN_13
e6c68ae5-12f0-4c8b-b5ca-8f725874c704,Полушка,EAN_13
e6e830c8-16b9-4382-9b84-93dca76ee66c,домаркет,CODE_128
e6ece7bc-ac39-45c6-b4f3-c225719c3a0e,Mikado,CODE_128
e6edbb92-d988-4bf3-87f8-e9684b5a3983,UFS Healthcare,CODE_39
e6edbb92-d988-4bf3-87f8-e9684b5a3983,UFS Dispensaries,CODE_39
e6efc01d-98bf-478e-a916-f51178a01690,Erborian,CODE_128
e6f32c21-af1b-4da3-9c8e-36757cccde3b,Sally Beauty,CODE_128
e6f9e7a3-2b1f-4ec7-8c99-8c5d16988f56,Iндустрiя краси,EAN_13
e71a67d2-6898-4a05-91dd-7ae19095129f,FMBrikon,UPC_A
e71b01e0-cdf1-4f6b-bee6-d7e2fc9b3a81,Walder Schuhe,CODE_128
e760dd3f-aeb2-42a2-bf38-5866c061c2e9,Cash Piscines,CODE_128
e79c474b-4ee0-4885-a9eb-7349bdc2bfc9,KIA,CODE_39
@@ -7284,7 +7200,6 @@ eaacfd6c-54dd-4bbd-81a2-0394b7b57496,Kmart,EAN_13
eab09679-f885-46a1-8f96-3f82ea3b9d82,Niké,ITF
eac387cc-ae67-4874-b420-12dae0150abc,Woss,EAN_13
eacb1c97-e7c2-4ed6-bf64-84db244fbdd5,Медтехника Ортосалон,EAN_13
eacdf92e-6601-437d-af01-15156a3ee199,Barossa Co-op,QR_CODE
eb01f161-6d42-4ae9-b381-2ca0be34cd6f,PiùMe,CODE_128
eb2cfbfc-1d25-4ff7-9eb6-743a74c302c4,Клеопатра,EAN_13
eb32c9d7-80b8-4147-942f-3b94ad7dd8fd,Brico Pro,EAN_13
@@ -7338,7 +7253,6 @@ ef56f2fe-b4b0-4639-a0dc-db4c6bd01d06,7я,QR_CODE
ef8b1a62-353b-44e3-bfba-b1331b6509ab,Evoluphar,CODE_128
ef8f92d7-a5a1-441e-8e91-133b64da57e5,Anabel Arto,CODE_128
efdfda06-b4ad-4bd6-ad00-41d6ab9aeaf8,Profi Center,CODE_128
effbec31-0ed6-4eb3-969b-17d99d340d78, Sedici Piadina,CODE_128
f01c0047-5952-4805-a48b-4d455d833777,ХозСити,EAN_13
f032c0d2-9f71-47fa-9574-8970a917b63b,Brianza Biblioteche,EAN_13
f0637a9d-47a8-44a0-8342-c409b6c55b6b,Baby,EAN_13
@@ -7355,7 +7269,6 @@ f1843eba-2bcd-49dc-be2c-1444ff5cfd91,EU COVID-19 Očkovací Průkaz,QR_CODE
f1df75b9-1d7a-4cba-9e9d-f4411f4ea48b,Индейкин Дом,EAN_13
f1e508d1-b901-45ba-9ace-b98e96c8fd38,Dalbe,EAN_13
f1f1c15f-8a75-4a18-9b01-251778c8fb45,Optika Anda,CODE_128
f1fe28ce-0c9a-4b64-a455-c9f14c3fa2be,PME Legend,CODE_128
f2153289-2b50-463f-91d4-37ceb62f304b,Колесо2,CODE_39
f21a2eea-3a15-4765-8ea6-3f1ec10fdd87,EU COVID-19 Vaccinationsattest - Anden vaccination Skudt,QR_CODE
f2292778-e0fe-4925-b939-b4716342fa44,Tread & Miller,CODE_128
@@ -7370,10 +7283,8 @@ f2a92584-5ef8-4220-b0ca-7aa48decd2e4,Artex Ieper,EAN_13
f2b9fa76-c78f-4d2c-821f-70678bc8d4d5,Parfümerie Becker,EAN_8
f2c8f722-9c5f-423d-9989-deca7901aa11,Poetry,CODE_128
f2d3f68c-7b77-4464-91d2-3162e74bea48,Neinver,EAN_13
f2dc6f84-01cc-4e13-aec2-2ce88367a27f,Ljekarne Prima Pharme,CODE_128
f3189d64-dd39-468b-872d-3bb70e4d416c,The Watergardens Hotel ,CODE_128
f3287ab2-0308-42f8-92dc-3147456a4a69,НУЖНО!,EAN_13
f359407e-234b-4fbb-af07-f3b293a51bbb,MaRinella,EAN_13
f35a3882-27b2-417d-8093-e87f8f25509a,Первый Семейный,CODE_128
f3852d29-47fe-4528-83cd-5ae7b31fdb0e,Kraus,PDF_417
f3e63893-802b-4e40-9480-f3fbfda0a3e4,Аптека живика,EAN_13
@@ -7386,7 +7297,6 @@ f49e49df-1b1c-4e19-994d-3a56c693d91c,GROSBASKET,EAN_13
f4aefdf7-e66f-4980-a0ee-7e6f1afcc8df,Color Line,EAN_13
f4b16522-478d-4c84-bfa5-e0825ebf4917,bonVito,PDF_417
f4d0cac3-70a0-43dc-a204-fe5fd9ab428f,KüstenCard Flexi,CODE_128
f4e09fa3-b712-4be5-915b-002082002246,Club VW Suisse,QR_CODE
f5002bd9-8e95-4c11-8a7c-e3d2fae42fe3,BCAA,CODE_128
f5356dd8-8762-4f36-8c50-f7383eccb840,Twój Market,EAN_13
f546e937-86b4-40eb-98cb-9a348d5dccec,МаксиФлора,EAN_13
@@ -7422,7 +7332,6 @@ f8f0bd64-d1ae-4560-9c22-0eed805f2016,Дивный Колибри,EAN_8
f8fa2370-261e-4e19-ba9c-46cd33ead64d,Agri Sud Est,EAN_13
f90691bf-2879-4424-b2d5-5c09ee9ff700,Кроха,CODE_128
f915ed01-85f9-4a61-921b-0d33eaf6fd23,ЗооОптТорг.Рф,EAN_13
f9223231-26b6-4f86-9d2e-5756488c2e74,Jack & Jones,QR_CODE
f93e7a30-4351-47e5-b8b2-3a9546ad9bb8,BOTICINAL POWERSANTÉ,EAN_13
f940a1b8-c04b-4541-b307-7fdc1fa8eb91,Veggie Grill,CODE_128
f9447f67-140e-402d-9a27-e7c11cefebda,Eleganza,CODE_128
@@ -7441,7 +7350,6 @@ fa009005-250b-4994-a6ad-8043b28634fe,No One,CODE_128
fa11b2c7-a768-4d4b-b03d-c845df6cb341,Terra Viva,CODE_128
fa1670c0-1713-44f0-b57d-902b278ba741,нива,EAN_13
fa24b789-4774-41e1-8a52-216efc9de8ba,foodmaster,QR_CODE
fa3bdecd-2216-4d2b-b39d-fb14681f62fc,Fusion Gyms,CODE_128
fa5593eb-2f35-4a7f-8c69-1c4a726759be,Форум,EAN_13
fa7407ee-0ddd-4727-bfc7-05c206c159d0,Toto,EAN_13
fa7f3968-0cba-4adb-b1bb-fb2083b98b2f,Der Bäcker Eifler,QR_CODE
@@ -7452,7 +7360,6 @@ fac3cc98-d990-4106-b17a-e8b5afe1b843,Fidenza Village,CODE_128
fadd868f-b34b-4604-8a24-c7fbcd8ea573,Big Marlin,EAN_13
fae896a0-9c57-4ff8-be30-195fbf137a0b,Lotteria degli Scontrini,CODE_128
fafa23c9-5cda-4fb8-aab5-6faebc6386a8,NETTO,CODE_128
fb340faf-4fe5-4446-b811-217d615f5514, Abbonamento Musei,QR_CODE
fb507b68-ecf4-4397-969a-23e2427f76f2,Veritas,EAN_13
fb5e84a1-5e9f-4fa5-ad36-c6060927c415,BIT BY BIT,CODE_128
fb6edc61-a282-4217-9b44-ac2611b5977c,Kierrätyskeskus,CODE_128
@@ -7493,10 +7400,8 @@ fe488a32-17aa-4b93-8e88-b2df166b30b8,BIEMAR BOIS,CODE_39
fe54303c-8e1c-4c62-8ee6-b9485e333419,Liverpool Library,CODE_128
fe889ad0-ea52-4069-a051-b5ceb4c4b4e7,Аптека Гермес,EAN_13
febc239e-ed07-45ac-905d-b6048a203784,Scarpamondo,EAN_13
fed489b7-1d23-4b3f-b20f-52c229575de0,Autowaspark Kuzee,QR_CODE
fee32f93-2fe4-4fa1-ab62-159bdc375668,Покупочка,CODE_128
fefcdd70-4aa8-4f78-b9e6-1dc18f9cd731,Button Blue,EAN_13
ff50e5dc-1f3a-43a7-a55d-4a7d96b12757,Le Guidon Niortais,CODE_128
ff92fe3e-1b38-409f-9701-ee7665fccb5e,EU COVID-19 Certificado de Vacinação - Primeira injeção,QR_CODE
ff9fd337-4765-4ad1-90a3-62e4a78dc3ec,Нияма,QR_CODE
ffa57152-01bd-48bc-be45-46bac303c450,Мед Сервис,CODE_128
1 _id name barcodeFormat
13 015cf86e-c4b6-42b5-abed-5821492b2669 Campbells ITF
14 016c8380-d433-4eb1-b7a0-df6fd9254ec6 Friendlies Pharmacy CODE_128
15 0189b6a0-3f02-418f-872e-d5e354619a45 Mencke Gartencenter EAN_8
01b239f4-d1db-4311-a33b-bc8bb9c71c19 McEwan CODE_128
16 01ce8326-50e8-4787-9999-e509dfed15cb Вигода Вопак CODE_128
17 01eafcc6-ee41-447f-bbce-7a93ffb90b6c Mario Mikke EAN_13
18 01f88e2d-3eb4-4242-a32b-1a847a28e140 Crodux CODE_128
31 037f2420-273c-4ffe-9dd3-af22868b1b59 Al Pentolone EAN_13
32 038516b8-3cdd-4f96-9582-97caf9dc3a47 Dier Specialist CODE_39
33 039784f4-4fef-497e-8f03-f026655394ef террапевтика EAN_13
039932ff-caec-4d40-aa9a-0ed185b5cf5f FNV CODE_128
34 03b89b04-69cd-43cf-88eb-35760f092488 Мегаполис CODE_128
35 03d62f02-8266-493b-b4fd-95d5c853b87b мта EAN_13
36 03fd0d65-b3dd-427b-9f7c-3554fe3dc99b Happy Sport EAN_13
60 0777b427-2af5-4531-81c3-f7421dde9d63 Евразия Автозапчасти EAN_13
61 078a5228-818d-4a86-8726-c71dd27a3fdc EU COVID-19 Certificado de Vacunacion QR_CODE
62 078fdcef-2e8a-4179-befe-5959cd588a7e Клякса EAN_13
07a90343-0b80-4cb4-8571-b6a2419cff6e Maracatú CODE_128
63 07f645dc-3127-4050-94ac-41f42cacdb74 Cats & Dogs EAN_8
64 081924f1-3eff-480a-a8a9-ec08eb4b75e7 Rossetti Market EAN_13
65 0821c8d1-4556-4178-af1b-fe4d1977127d Feedo CODE_128
84 09e1c670-eac2-4077-8a66-b990c3ba1ed8 Gamble & Brown Cafe CODE_39
85 09e38952-3559-4432-821a-84fdee4923f8 Стройка EAN_13
86 0a047088-f9f9-47c5-a982-b307122f09fa IGA Rewards EAN_13
0a058735-ecfd-4278-ae7a-9f6917193a3d JBs Power Centre CODE_128
0a124613-4513-4a4f-b89a-6c4b645e395b BoniChoix CODE_128
87 0a6c06b6-056d-4bf2-ae78-915a8c52d464 волгорост EAN_13
88 0a7c000b-39eb-4464-bc41-03d0e1f4a20f Life Pharmacy CODE_128
89 0ae08429-e2a2-4fe0-840a-e940ce9fd3e5 Zebra EAN_13
90 0b2502b7-f8d7-426e-b518-4482ee6115eb Лоза EAN_13
91 0b4c67fb-bf76-46e8-9a3b-cb0acfe47e71 Giocheria CODE_39
0b539afa-e6b5-42a0-8f03-50d5de9f4af0 MediaMarkt Club Karte QR_CODE
92 0b600df8-f694-49d5-b5ee-56d0b47ab1bc reima EAN_13
93 0b82965b-29df-4c9e-ae5f-70a5d10f1d32 Fanølinjen CODE_128
94 0bb951c2-c644-4a0b-92c0-754d739a55be ZALY EAN_13
128 0f650862-0a1c-4596-b2f9-30fc8d3bf8d3 Lila Bäcker QR_CODE
129 0f69ba3f-6084-49a5-b959-24277008de45 CJ Express CODE_128
130 0f936e1f-b3ac-4a34-aad7-a18bd76150f2 FOTOLAB CODE_128
0fafa67a-b4d2-4365-9f68-c167d43c7070 I TOURS CODE_128
131 0fce03a0-6b7b-427c-a483-26a1169e73b0 EDMINS EAN_13
132 1 Accor Live Limitless Accor Le Club QR_CODE
133 10 Aeroplan CODE_128
134 100 Esprit ITF
135 1000 Chemmart Pharmacy CODE_128
465 13 Amavita EAN_13
466 130 GNC UPC_A
467 1300 IZOD CODE_128
13004ca8-9095-40c2-aa98-1fcf6410efc7 Max Shop CODE_128
468 1301 La Quinta Inns CODE_128
469 1302 Pet Supplies Plus UPC_A
470 1303 Piazza Italia EAN_13
501 1331 Bizzbee QR_CODE
502 1332 Blue Box CODE_39
503 1333 Brice EAN_13
504 1334 Tecnomat Bricoman GS1_128
505 1335 Bricomarché Brico Marché GS1_128
506 1336 Camaieu CODE_128
507 1337 Casino Supermarchés EAN_13
508 1338 Castorama CODE_128
680 148f7495-e6f2-40b1-80cd-99b3632cb976 Slam ITF
681 149 Höffner ITF
682 1490 Basko EAN_13
683 1491 Unes CODE_128 EAN_13
684 1492 Grande Cinema 3 EAN_13
685 1493 Eurobrico EAN_13
686 1494 Isola dei Tesori EAN_13
966 172 Jost ITF
967 1720 Wheelup CODE_39
968 1721 BIG4 CODE_128
969 1722 Besson Chaussures CODE_128 EAN_13
970 1723 Cactus EAN_13
971 1724 Idea Bellezza CODE_39
972 1725 Uyum CODE_128
983 1733 Mondial Tissus EAN_13
984 1734 Furet du nord EAN_13
985 1735 Maxxess EAN_13
986 1736 Des Marques et Vous Devianne EAN_13
987 1737 Colruyt ITF
988 1738 Paul EAN_13
989 1739 JouéClub EAN_13
1044 179 Kastner & Öhler EAN_13
1045 1790 MY SIZE CODE_39
1046 1791 PetO CODE_128
1047 1792 Aveve AVEVE EAN_13
1048 1793 BIO-Planet ITF
1049 1794 Brico EAN_13
1050 1795 Club CODE_128
1343 1e43877a-d4f1-4bff-bdb9-cd3346082a46 Scorpion Bay EAN_13
1344 1e9469a4-8388-4ca9-a463-95ee73a0d953 FAMO EAN_13
1345 1e9a127a-0451-4565-9560-eaa097d3808b Grill'd CODE_128
1346 1ed46ee6-993a-4053-a016-a0d67e26b91b Lidl Lidl SK CODE_128
1347 1f01c3b1-08f7-4365-a0f9-f1c9bcbdf58a Fresco CODE_128
1348 1f15d8f3-c35c-46d6-8038-4c9f91a18909 Покров EAN_8
1f1ec99d-c8c6-42d3-ac6a-b9658a6e0a0d xBarvy EAN_13
1349 1f661d7a-d355-4590-8d33-0d61630958cc NDG CODE_39
1350 1f6624c6-5acc-4983-ac17-31b9004232d7 Afvalpas Rijssen-Holten QR_CODE
1351 1f69337f-7604-4e7a-9031-f0ab182e7cd7 Дешёвая Аптека Вита CODE_128
1453 2085 Billa EAN_13
1454 2086 Billa EAN_13
1455 2087 BIPA EAN_13
1456 2088 PENNY Penny EAN_13
1457 2089 Penny EAN_13
1458 209 MCard CODE_128
1459 2090 Shoprite CODE_128
1492 2112 Lindex CODE_128
1493 2113 Twilfit CODE_128
1494 2114 aClass CODE_128
21143721-38a4-466f-b04d-a3e90cb62bad L'angolo CODE_128
1495 2115 Clas Ohlson CODE_128
1496 2116 Agrimarket CODE_128
1497 2117 Starkki CODE_128
1600 2201 Avance CODE_128
1601 2202 berca.be EAN_13
1602 2203 Brantano EAN_13
1603 2204 Brooklyn nv Brooklyn EAN_13
1604 2205 CAMELEON CODE_128
1605 2206 Carmi CODE_39
1606 2207 E5 mode ITF
1940 2488 Proximus CODE_128
1941 2489 RS Bútor CODE_128
1942 248957ba-dbad-414e-86e4-009fc4e5beee Самоцветы плюс ITF
1943 249 Woolworths Countdown CODE_128
1944 2490 SEIBU PRINCE CLUB CODE_128
1945 2491 サミット EAN_13
1946 2492 The PUB CODE_128
2024 2557 Artex Fashion EAN_13
2025 2558 Askot CODE_128
2026 2559 BUTIK EAN_8
255d84f7-144d-4d63-b6fd-f00a8e94641f HUK Autowelt QR_CODE
2027 256 Palmers EAN_13
2028 2560 Dayli EAN_13
2029 2561 De Banier CODE_128
2440 28a46b11-8c45-4b2a-93dd-b7325a2fe013 Dialogues CODE_128
2441 28b5866e-f195-4d68-b8a0-02cdb611af4f Да Здоров! аптека EAN_13
2442 28c5ee9a-cf66-4add-b71c-70b66be85570 Agraria EAN_13
28cc5dc7-61b4-4c95-a5a6-e125cc4bce9b Aventurx CODE_128
2443 28d93baa-c331-4df8-a85d-65eb86199732 Solar Studio CODE_128
2444 28fbdd64-8715-4cdc-8c3f-df7259b1ba65 NOHO EAN_13
2445 29 Heathrow Rewards CODE_128
2582 2b1eb78e-9684-4434-ba9b-41f00fc5beab Sensation Profumerie EAN_13
2583 2b29bfc0-26a7-44cb-9d21-2a0bdb467320 Vertex Hotel ITF
2584 2b39b807-6375-404c-bfd7-7f3135654258 Планета Игрушек EAN_13
2b6062ec-39b1-4ac4-b6d6-cf19048c9f3f Coripet UPC_A
2585 2b6992d5-615a-423a-b196-ab19a418686f Mimco CODE_128
2586 2b7d84ce-c573-44ea-8989-b23a13cf389b Азбука Красоты EAN_13
2587 2bc9768c-56a2-4d7d-8f1c-0be9f208b71b Profile CODE_128
2852 3199 Navyboot EAN_13
2853 31d21202-2674-4c42-9a7e-a19b01d32b63 Vegetalis EAN_13
2854 31d3cf0c-7522-4035-9256-7a712cb1a8b3 Канцелярия EAN_13
31db4e18-fb97-43d2-b026-c41f39d2faba Bershka CODE_128
2855 31eccc6d-babd-4fee-9ae8-db9a00fc1c63 Pharmactiv EAN_13
2856 31f60f6d-633f-42af-b387-e5d0b4e2f45f SPINNS EAN_13
2857 32 Bauking EAN_13
3092 3399 Taxi Jetax CODE_128
3093 339bb076-12fd-4e56-899f-3acb79f5da53 Hafenhotel Meereszeiten CODE_128
3094 33a430e4-35c7-43e7-98e8-5ce5d039ee70 VPZ CODE_128
33cb4886-5d06-473a-80b7-980ca2fb27c2 Bouwcenter Nobel EAN_13
3095 33d16d2d-f51e-44c3-92d8-2c3616af2d0f Apotheke Peer Farmacia CODE_128
3096 33dea27e-c7a4-4e40-8621-32da990f7d82 EU COVID-19 Vaccinationsintyg - Andra vaccination Skott QR_CODE
3097 33e82e4f-5541-4be1-aa4c-0f2987cfd78f Данди EAN_13
3452 37 Bessmann ITF
3453 370 Virgin Atlantic CODE_128
3454 3700 Go Auto CODE_128
37003c25-7bc7-4dd9-8a3a-8406005d0dcf Scouts en Gidsen Vlaanderen CODE_128
3455 3701 Good Earth CODE_128
3456 3702 Hachem CODE_128
3457 3703 Le Magasin CODE_128
3949 4083 Каляев EAN_13
3950 4084 Shingle Inn CODE_128
3951 4085 Golden Casket CODE_128
40853977-7fdb-4815-a64e-85d2c70df347 OROCAJA CODE_39
3952 4086 Pet City CODE_128
3953 4087 chempro EAN_13
3954 4088 merlo CODE_39
4313 4387 Kremer EAN_13
4314 4388 Gartencenter Nickl EAN_13
4315 4389 Panarottis QR_CODE
4316 439 Volare ITA airways. Alitalia CODE_128
4317 4390 Simply Asia CODE_128
4318 4391 Ultraliquors CODE_128
4319 4392 Cum Books CODE_128
4565 4599 Мокрый Нос EAN_13
4566 45b55fa2-835b-4ae5-a318-16a66b4ec85b Євро Мікс EAN_8
4567 45cbba3f-f0d2-4837-8189-16b0ff2707f5 Барс CODE_128
45e6b637-a991-45ce-b72d-8f4df03d9f6b Tradition CODE_128
4568 45e6f6d3-e688-40f7-86e2-73e3803c86bd KüstenCard mini/maxi CODE_128
4569 45fa81a4-657e-414c-89ed-ebf1c49c0926 G'DAY REWARDS CODE_128
4570 45faf9e5-321c-44a7-b641-7acee8126349 EU COVID-19 Vaccinatiebewijs - Eerste vaccinatieschot QR_CODE
4772 4773 Maximiles CODE_128
4773 4774 La Compagnie des Petits CODE_128
4774 4775 Totem Family CODE_128
477515a9-2257-4d19-af18-3dbcfeb4acd9 Omni CODE_128
4775 4776 La Jardinerie CODE_128
4776 4777 La Plateforme du Bâtiment EAN_13
4777 4778 Animal & Co EAN_13
5049 4adaa99b-282d-4abe-87c8-b16d3958f4c2 Тюменский ЦУМ CODE_39
5050 4ae5d40d-45ea-4188-bce8-eb3337733466 Garden Floridea CODE_128
5051 4b197111-0d79-4ac5-aecd-5dca6643e390 Евродом EAN_13
4b50787c-052c-48e9-8bae-b01373cef1b8 Fbo Clothing CODE_128
5052 4b511f9a-5c9c-4b9f-8c71-1631cb78456a Семейная Аптека EAN_13
5053 4b8e7174-b85b-4b82-99ab-b1faee2dfb8f Diper EAN_13
5054 4ba9de66-0015-49e1-a0d1-d24c2328eaa5 Witchery EAN_13
5063 4ccb26a9-3a58-487f-9bdf-5cc4b042c0b3 UNCS CODE_128
5064 4cd0da27-9a71-4eb0-88f4-23919b598828 Pins CODE_128
5065 4d28254f-9ec6-4262-aa28-ee0bd7620b00 Леонардо EAN_13
4d4102e9-115a-4695-b764-c5534e1749a8 twd EAN_13
5066 4d7b0d6e-2680-4c6b-bdac-8985df7aa8a3 大昌 EAN_13
4d8c62b4-b4c5-40b0-9117-6e5022cf7950 MilleMiglia CODE_128
5067 4dab7847-f728-4c34-80ea-a464238a3756 Волна EAN_13
5068 4db2f926-b58d-4821-8f85-b02d3e32fbcb Дом посуды EAN_13
5069 4dd50f0e-05a1-4a32-97c2-1e5b570d0d9b MIA EAN_13
5070 4dd586bf-d2ed-4357-898c-11b648bcb796 Детский парк EAN_13
5071 4dd5aa56-2f5c-4bb5-a281-211bb4e5463e Joylab CODE_128
5072 4e090085-f5bc-4f29-abcf-bb249dd3429d SSENSE CODE_128
4e1001a2-a664-4d37-8b85-a71b02f9f6dc xFarby EAN_13
5073 4e24761b-17a7-4b7d-b04a-16f54076d03b Forum+ EAN_13
4e6622db-6fd3-405e-a60e-7157984da5ba KiemKracht VZW CODE_128
5074 4e95cfa4-3011-41c2-ad87-0c560cbd218c Lincolnshire Co-operative DATA_MATRIX
5075 4eb5bcd8-9467-44ce-b54c-fc69521431be Мир Обоев CODE_128
5076 4ed66bc0-04ee-458b-aac7-6bb7bdd35e5c Пивотека CODE_39
5300 519 Alimerka CODE_128
5301 5190 Souris Mini CODE_128
5302 5191 Лакомка EAN_13
51917108-3469-4067-b1da-8697d60fcfa6 Kingston Frontenac Public Library CODE_128
5303 5192 AlphaZoo CODE_128
5304 5193 БИГАМ EAN_8
5305 5194 Sebastiano EAN_13
5406 55cfc40e-469f-485f-ab26-823014fd8401 Seebauer EAN_13
5407 55db252f-70a8-4da7-b0c2-484c8445e750 Kreativmarkt Hamburg EAN_13
5408 55e96a49-7157-43cc-aaa7-9867d37cb05f Народная линия EAN_13
55eb9a72-cd1d-49f7-aec1-1f44f6207983 Lina Giorgi snc CODE_39
5409 55f414b7-b1a8-46f6-97ad-7f4f0867d8a9 EU COVID-19 Rokotustodistus - Toinen rokotus laukaus QR_CODE
5410 56 Brax CODE_128
5411 560 Punt Roma CODE_128
5492 5afc2de6-6129-43f5-9caf-be3572d65a90 Sisal CODE_128
5493 5b01f59e-97db-4105-9aab-94f56099fc49 real GS1_128
5494 5b1da0f0-143e-492d-83a9-ad22957a54c6 Metro Lifestyle CODE_39
5b502f6e-7c38-4708-ae56-04f97638692a Баня Стил CODE_128
5495 5bb5ea85-8952-474e-be53-c5ac11f7428f Farmec EAN_13
5496 5bb6dc04-3000-475f-a5d4-ba9427989809 Bimbostore Toys Center EAN_13
5497 5bf3f149-2217-45aa-b61b-eec9aeedf5d2 Werdich CODE_39
5509 5d3de23f-b72e-4920-9e3b-1a413979a779 CityCard CODE_128
5510 5d426084-854e-493e-a10d-7ce5d34d31fe Farmacie Comunali Firenze CODE_128
5511 5d51a06c-3af4-4400-9776-e3458190be87 Parisnail EAN_13
5d5d4520-ee6c-45ea-b5f1-11282a0673f4 Arriva CODE_128
5512 5d695da3-f47b-4da8-b5ff-ea9d0fd9486b Belaton CODE_128
5513 5d866631-9858-4393-a5cf-eba96ca066cc Kiwisun CODE_128
5514 5db03921-3703-40d3-ba27-f7d3ff5a40ba Prodor Supermarché et Boucherie EAN_13
5518 5e18e98b-ad75-426a-a4ac-a80496906906 Beauty X EAN_13
5519 5e27a7ae-ad95-4cce-b383-85a4eb822eaa Supra Baby EAN_13
5520 5e402125-50f9-4de9-8769-ce4e0dc1d1a1 Romaest CODE_128
5e46de16-6ebf-4d17-933f-2f782df8b3fb Prima Company CODE_128
5521 5e6edac6-a458-4488-861c-f8f403f4b1e1 MABÙ QR_CODE
5522 5ee2ee34-5027-4535-a55f-657c1a092d5d Lady Sharm CODE_128
5523 5f01e866-3ef8-46e4-a40a-555594849eb7 ЦУМ CODE_128
5532 6 ACS CODE_128
5533 60 Transgourmet EAN_13
5534 600 Humanic ITF
60046ae3-b41c-4a08-a012-d8e921e8aab0 Multaparts CODE_128
5535 600bf563-b7b2-488a-9e21-0ccc63a67b1d LAUF! EAN_13
5536 601 Beauty Alliance CODE_128
5537 6014a435-c656-4bf7-bcd6-fa46ed28bac0 Окраина EAN_13
5554 61 Centro EAN_13
5555 610 CAA CODE_128
5556 611 Calgary Co-op EAN_13
6110d522-b979-46ca-a313-ded4eac7db71 Telecomshop Twente CODE_128
5557 612 Canada Post CODE_128
5558 613 Canadian Tire CODE_128
5559 614 Change Lingerie CODE_39
5560 615 SCENE CODE_128
615a7629-0f60-4613-b41a-e1f571f5c20a Goelia CODE_128
5561 615ddf35-4934-4442-b4df-54b065184476 Сигма EAN_13
5562 616 Denny's CODE_128
5563 617 DeSerres CODE_128
5609 639 National Car Rental CODE_39
5610 63ace5b1-39bb-4486-87a8-692caab2c76b куулклевер QR_CODE
5611 63ad5b7e-ab54-45f2-9224-2da0122a21eb Forum TC EAN_13
63b32bf3-2e99-4487-bc45-7b70132fe53c Checkers CODE_128
5612 63bcf094-bbc1-4caa-adfb-b6e015295f43 Парфюм Лидер EAN_13
5613 63bee835-2e9d-4656-b7b6-4b9e9a024470 Арт-Квартал EAN_13
5614 63c87418-cb15-4294-a872-035a03da3a62 Belleplant EAN_13
5644 657d61fe-7714-4aed-a3d5-6c718c6e9c2a EU COVID-19 Vaccinationsattest - Første vaccinationsskud QR_CODE
5645 658 Thrifty Foods CODE_128
5646 659 Trade Secret UPC_A
5647 659c40c9-f997-44a8-b6a8-a29df616c4b2 Alfa-Tec EAN_13
5648 65e6e477-57a3-41c1-88b2-330a6d0cf8bd Nobis PDF_417
5649 65e848d6-edd5-401e-9b12-952a5c6fdf47 Джерела Здоров'я CODE_39
5650 66 BCF CODE_128
5652 661 WestJet Rewards CODE_128
5653 66104d31-9ae9-440d-b316-0d07a4319af3 Farma Fedeltà CODE_128
5654 662 Würzenbach Drogerie EAN_13
662e6cc0-3ebe-47db-badf-b31b626ea70c The Papanui Club QR_CODE
5655 66335d92-4622-4334-8384-4a6d5f61f239 Zinger EAN_13
5656 664 American Eagle ITF
5657 665 TJX Style+ CODE_128
5696 687 Thai - Royal Orchid Plus PDF_417
5697 688 SportIT EAN_13
5698 689 Foster Calzature EAN_13
68ac6315-08c6-471d-b2e0-ad42d1a091c8 100 Vetrine UPC_A
5699 68c2495e-937d-4e71-a4ad-85f066df0339 Jardival EAN_13
5700 68c69327-cce9-4de8-a062-b895c062ee60 Iden EAN_13
5701 68d4b527-e419-4346-8078-a4ef07a04f00 Lehner Versand CODE_128
5729 6a5ac3f8-04cb-4d14-884f-1231b72228e8 Топаз EAN_13
5730 6a7b1bc8-eca7-4323-9080-68af9414254f CastoPro CODE_128
5731 6a85186a-bfd9-4078-a5da-db1b4e1fb526 Molders CODE_128
6a8a8971-821c-46ce-a638-1a8585c9dedd Booking.com CODE_128
5732 6aa89061-d0b5-46a2-9019-b1cb7146e485 Just Plastics CODE_128
5733 6aa9bd9a-b099-4997-9fa1-b0a7525c6ec7 AZ Casa EAN_13
5734 6ab113ff-77e9-4029-9b23-e420eda105e3 Ehrmann CODE_39
5767 6faff0bd-9236-41f8-9c67-7b546c68085a BVS EAN_13
5768 6fb31971-1cf0-468e-9f85-ebf6133ad3aa у Палыча CODE_128
5769 6fb45bab-d4be-49fd-8b58-d841110eb0cb AL 48 EAN_13
6fb4ec1e-c6b7-4597-82a3-5c8d4d69ad4f Rachelle Béry CODE_128
5770 6fe38419-76d2-4b5c-983e-6dbed7822d62 GiorgioMare CODE_128
5771 6fea059e-d9ec-4063-8ea4-cba5ac035942 L'arca di Noè EAN_8
5772 6ff46a57-e3c9-457e-bfb4-aa922c4c41b4 BENZ CODE_128
5855 740308f3-fda8-4b83-9d86-d13592ef30ab Dress Code EAN_13
5856 741 O'STIN EAN_13
5857 74135c63-c1ab-47b8-8d99-4d9dcf602eda VOIX INTERIORS CODE_128
7415ddc5-3d77-410c-a6f8-ab399518a82c Tradition CODE_128
5858 742 Reebok CODE_128
5859 742069df-a468-45d5-8cf6-cc152b4aefaf Bacher Garten-Center EAN_13
5860 743 Savage CODE_128
5902 764 Васаби CODE_128
5903 7648aaa6-671e-4396-9e4e-759aa66c9f4f Bouwcenter EAN_13
5904 7649e44e-66e4-4af1-a913-87a40c8ae739 Office Centre CODE_128
764a67a4-8087-41d1-b53a-d73b8380d5cf Handy Home CODE_128
5905 765 Вестер CODE_128
5906 766 Виктория EAN_13
5907 767 Газпром АЗС EAN_13
5934 780bd58f-acbb-493c-869d-63f7a93292f3 Schnitz CODE_128
5935 781 Кофе Хауз CODE_128
5936 782 Красный Куб CODE_128
78242148-6c07-4698-9ec1-56017dc687b6 Ideacasa Mercatone EAN_13
5937 782b0597-f7e4-4509-ba4b-a9fc35d72b4d Рада EAN_13
5938 782f7353-ec4c-49a8-9aac-1f7d28f4cab2 Remix Moda EAN_13
5939 783 Лукойл / Ликард CODE_128
5988 7bd30784-434b-4d73-8dc1-5b5516723eda Pascal Coste EAN_13
5989 7bd61c87-b62d-439a-92e9-cc435345cb53 Infinity Fashion CODE_39
5990 7c138f2e-37f9-46d4-ac65-2b20ff90a629 Nai Harn Gym CODE_39
5991 7c1b39b5-b938-432e-b0be-3c196320bd37 Checkers CODE_128 QR_CODE
5992 7c5a9dd0-28b0-4be1-b53f-cac4246990b4 Марафон Обувь CODE_128
5993 7c60823a-e9fc-447f-811d-589bf1f95342 Пчёлка маркет UPC_A
5994 7c77ce3b-02ad-436b-a4aa-62a6d5d583e3 Plainview-Old Bethpage Public Library CODABAR
6004 7ce87cdb-4c6b-437f-a693-dca518f7436a Yo-get-it CODE_39
6005 7d02542c-fac0-45b5-bc90-d74240715c56 Travis Perkins CODE_128
6006 7d11f040-b0a2-4109-bdf1-25711d48d451 Consorzio Infarmacia EAN_13
7d168ca5-9370-47bd-ac3e-bf1e1e26f1ec RISPAWORLD CODE_128
6007 7d41888d-cd7d-42ef-bf93-9aeda5ae13f6 Kepro EAN_13
6008 7d4345b8-448b-4e12-a1c5-c6e031de2352 Nove25 CODE_128
6009 7d520d1c-611e-4e81-9937-41a9828e6b08 EU COVID-19 Vaccinatiebewijs QR_CODE
6014 7da65ee3-d140-469c-b3ee-217272ac98d4 Kippie QR_CODE
6015 7db0f727-13b4-48c1-8618-550155a878a2 Imperial Games CODE_128
6016 7db8a067-1c33-4cd9-9706-31a2592f719a милый дом GS1_128
7dd14421-2fe6-494f-889b-dd8920f61091 Mastro Tortello QR_CODE
6017 7dd1b9ca-2a5b-4f3c-8c10-8bc216ff5d2f Sokolov Jewelry CODE_128
6018 7df2728d-3dc9-4724-8756-965e937674e2 Marriott Bonvoy QR_CODE
6019 7e3da299-047b-4981-8ff3-e5355c7289b2 GIROPHARM EAN_13
6040 8045996b-082d-4333-b631-54dc992ebef0 Coop EAN_13
6041 805 Старик Хоттабыч CODE_128
6042 806 Stockmann CODE_128
8069f84c-3b04-4b0a-87fd-d89230547e8b Happy Pets QR_CODE
6043 807 Сток-центр EAN_13
6044 8070cf0a-9721-4fe7-b010-6fdca61349fc Epping Plaza Hotel CODE_128
6045 8077e001-6db6-4796-bd82-6716ea5e116e Palace Cinemas CODE_39
6061 813f818a-e99d-49f2-af6e-653a9bcaab09 Bazar Avenue EAN_13
6062 814 ФотоПлюс CODE_128
6063 815 ЦентрОбувь EAN_13
8153abb1-248f-4af9-a7f8-dd83cdacdc7f TEKBIR MARKET CODE_128
6064 816 ЭКОНИКА EAN_13
6065 8166ded7-42b6-47b8-a5dc-032954e82db7 bugatti EAN_13
6066 817 Эстель Адони EAN_13
6071 81c5ea7b-aa89-47f8-a22e-297207616f0b Taurus Sports CODE_128
6072 81dd0d8d-4613-400e-8cbd-b2189a88a22d EULIVIA Apartments CODE_128
6073 81e7b9b8-826c-4f9e-9c61-7568a454afa5 Industriya Krasoty EAN_13
6074 82 Desigual QR_CODE CODE_39
6075 820 Air Miles EAN_13
6076 820b5de7-a25a-4d30-ac74-3a70fe682bfd Мир Электроники CODE_128
6077 821 Ajax Amsterdam CODE_128
6135 848 Lake Side ITF
6136 848939e3-7e55-40af-a46a-a0b0b434bbcf Планета ZOO EAN_13
6137 849 Le Ballon ITF
8495d3db-8532-4bef-a58f-3a77479ff134 C&A CODE_128
6138 84a82d8b-1d4f-4673-b1e2-b115bbe5b618 Soul Origin CODE_128
6139 84faf272-0010-4f93-8aa1-154caaa11ac2 Pro-Duo Nur für Profis EAN_8
6140 85 Diamond Club CODE_128
6194 87737e38-8052-4fdc-a90a-3511b9157481 PETS&CO CODE_128
6195 878 Jula CODE_39
6196 879 KappAhl CODE_128
879a9dd3-45e3-4633-9376-9183fee6ab3e Bernardi’s Marketplace CODE_128
6197 87b3f071-9af7-4163-b512-679717b696ac Caucciu EAN_13
6198 87b925d1-4d9a-47e3-9e54-deaef1981b77 Impfausweis QR_CODE
6199 87d141a6-cac3-4d39-9357-a6365850e57f Coeur de frais CODE_128
6247 8a0dca6e-de83-4e48-a42d-a3009da56653 Park 'N Fly CODE_39
6248 8a25357e-ebc3-4ae1-b7fc-a10ff3b1abd0 Конфил CODE_128
6249 8a53dffe-df27-40f0-b2ff-58e53add0b3e La Cartissima EAN_13
8a59226e-9895-4924-8616-345549a56aec Munhowen Drinx CODE_128
6250 8a702666-368b-48a5-96fd-4e10aac5ae7f Brooklyn Jeans ITF
6251 8a8095fe-f449-4242-83a1-0d3055874233 Little Sparrow CODE_128
6252 8a9c58f4-4db3-4aef-8cf0-d2caa0fcc4d1 EU COVID-19 Potrdilo o cepljenju QR_CODE
6253 8aa58d48-ad60-4b6d-aa1d-054f94b6453b Granola PDF_417
6254 8ac5093b-8fc4-49d6-b271-dd845252b60c Idea Verde Maschi CODE_128
6255 8ad83ece-2e55-4937-80c9-04584c598439 COM EAN_13
6256 8b0f2db1-ae97-4af8-8e82-c4067a4ac322 Ma Toyota Extra Toyota CODE_128
6257 8b398aea-e5bd-484d-bdf2-5030bacf9157 Thèoria Milano CODE_128
6258 8b4c413c-effc-4912-9a34-6baea2972199 Karla CODE_39
6259 8b653178-4f49-4f73-9091-7763e039b539 Aléa Déco CODE_128
6304 903 W.KRUK CODE_128
6305 904 Galeria Wileńska UPC_A
6306 905 YES EAN_13
90574104-b485-489f-9872-3d32b7e07c59 America Today CODE_128
6307 906 ZiKO Klub EAN_13
6308 9062c2a3-eeb1-4797-afb6-41a0394bb481 Městská knihovna - Česká Třebová EAN_13
6309 90705634-f152-487c-97eb-27e1728285ef Миртек EAN_13
6332 91915513-4447-47b0-93ae-d489f6ee3a97 Chrome EAN_8
6333 92 Düsseldorf International EAN_13
6334 920 Drummond Golf CODE_39
92063e91-526a-4327-ba87-f487bfaec724 Rue du Commerce CODE_128
6335 920c9bd0-d85c-42c6-9301-fc1ddedd38c2 Idea Casa CODE_128
6336 920ce49c-9728-41f1-b9e9-9f9d06f53d92 Русские Самоцветы EAN_13
6337 921 NWZ EAN_13
6368 935ef7c3-a93c-43e1-9abd-075bd05c3051 Форне EAN_13
6369 936 Orlen - Vitay CODE_128
6370 937 Wojas EAN_13
937cef67-4a01-42fc-9f51-0a3f3210a686 Idea Città Company GS1_128
6371 938 Sizeer CODE_128
6372 939 T2 Tea CODE_128
6373 93a8cca4-73cd-405c-8142-359a41127416 しまむらグループ CODE_128
6374 93a9836f-0984-45ee-97c6-3e6675a34b11 Ludwig Beck QR_CODE
6375 93b76ad4-76f3-4132-8fe5-972f6ca5eb8a Київфарм EAN_13
93bda8ac-884e-4db0-ab72-09e12f86a3d2 Naturino Family Store CODE_39
6376 93c53a6b-2efb-4167-aa67-c4905f1692b1 ВелоДрайв EAN_13
6377 93d1d2d1-801d-4293-a1f1-cdf314ba341a Nilufar EAN_13
6378 93d42408-df2a-42fd-a10c-9f9c725e8000 TuttintiMO UPC_A
6420 962 Монро EAN_13
6421 963 Jeans Symphony EAN_13
6422 9630a33b-0869-4246-91db-80f928bd7b3a Harfa Sport EAN_13
96394b6b-b91f-4fbd-991c-242b7189e0b0 Shoprite CODE_128
6423 963a19ff-687c-434a-a960-c5e9c6d27c1c La Cage CODE_128
6424 964 Спектр EAN_13
6425 964bee1b-84ac-42cb-ac20-b182e043a983 SIR CODE_39
6469 989 Toys Center EAN_13
6470 98959593-9b79-4d3a-98bf-fd965d99825e ташир пицца PDF_417
6471 98afc021-2350-4686-89de-03bc9bb686a4 Coeliac Australia EAN_13
98c597ea-20b1-4d9e-a6ae-0ed84e0f591d Juttu CODE_128
6472 98d5694e-ee5e-4f60-9a32-0ac43d66f54f Vaprio CODE_128
6473 99 Ernsting's Family ITF
6474 990 Nando's CODE_128
6530 9dc29233-9613-4851-8630-15b7b39222c3 Kasztelan CODE_128
6531 9dc3174d-0990-4d88-a4d6-3c7a6431160d Янтарь EAN_13
6532 9dc63493-8062-498a-99be-db701dfc03a4 Farmacia CODE_128
9dd46ad3-336b-4af2-9cbc-4526140558ef Kiriel EAN_13
6533 9e02cf7a-da20-428d-a363-952f7a3fb25c Kéddo EAN_13
6534 9e82e20d-4da0-46c0-bb94-c2ba7b9b3d74 Индустрия красоты EAN_13
6535 9ec73fed-0974-4b7c-98e0-27aba810e8e1 Spielwarentraum CODE_128
6541 9fd0773f-f0ee-476c-8351-c02fb65b9360 Plus Market EAN_13
6542 a00761f0-abf1-4690-a95a-b18e41c527d2 Pet and Pool CODE_128
6543 a017f67b-3483-4587-97a0-2c5c4af6834e SchuhMarke CODE_128
a0284158-4eaf-4891-9768-f93e1049413a Десятка EAN_13
6544 a04e9cdb-caec-4f4f-bf96-9e40fd90cb09 PharmaSave CODE_128
6545 a05edd71-80dd-4e23-87cf-5df65a193281 Andre Tan EAN_13
6546 a08ccd9d-76ce-4245-8582-24d2840ff7b9 Chanel CODABAR
6562 a2756aea-2ca4-4870-811e-100871fdb73e Pratiko EAN_13
6563 a29668f6-dd2e-4281-917e-49e28ebff6a1 Koloria CODE_128
6564 a2b352d9-5d5d-4080-9f52-eb6a798aa6c6 Ferlenz CODE_128
a322cee9-b5c6-4384-a365-c970f335cc5c Erdkorn QR_CODE
6565 a323e0ec-2b0b-4a82-a950-11f7516f2584 OnePass EAN_13
6566 a36556e0-433a-4b16-b72c-4751a386d707 EU COVID-19 Impfzertifikat - Erstimpfung QR_CODE
6567 a3828047-ff01-4eb4-be10-6e4d635ca029 Leffers ITF
6590 a645973d-7e87-46ab-8c77-0380ca06ae32 Perth Zoo CODE_39
6591 a65e3023-fa06-47c0-bfdc-4dc79f54c825 丁丁藥局 EAN_13
6592 a69154f5-16a8-4543-bb49-b7a68bb3d301 EU COVID-19 Potvrda o cijepljenju QR_CODE
a69d8b79-a0e7-422b-a149-64c66b23aea4 Plus More CODE_128
6593 a6aa66ba-00b8-4922-b628-98cea029c9e2 Coop EAN_13
6594 a6ab3df9-10bc-47df-bed4-839fe1e908be 零食物語 CODE_128
6595 a6b2c527-afbc-4e71-ae24-e5e5e270d474 Pappert PDF_417
6599 a78ee36a-3682-404f-9c83-307c1a6b421e Moda Lina EAN_13
6600 a79b9a92-9821-4824-978e-1a257abfbaff Wormland CODE_128
6601 a7b3e795-4746-45a4-9c80-d331fb051632 BonBon EAN_13
a7e263c3-75fd-4ac2-98ea-0e7b3e425a74 SUPEREFECTIVO CODE_39
6602 a7f1c8c5-2895-4a74-98ac-9740e7c59922 Coffeelat QR_CODE
6603 a8090907-7e2e-4038-8831-0c72adaa0664 US FashionStore EAN_13
6604 a83b00dc-1bfd-41b6-9fee-3c7f5d33fef5 Baden EAN_13
6628 aabf2ea4-170c-42e4-906b-ea1253ebf580 Родные масла EAN_13
6629 aac03de2-6c97-4bd9-8d72-a7bba15bea6d La capsuleria EAN_13
6630 aae4f87d-ee8c-4ff0-9cb2-88c478b7a0dc Bonjour EAN_13
aae6aab3-e5fb-47c1-b6c1-c30c3f386793 Netto CODE_128
6631 aaf65c10-a78e-4b18-8c79-371d5cdef871 La Provençale CODE_39
6632 ab0c09c4-d1cc-40a4-8b46-f101dc376655 Trade group SMIT CODE_128
6633 ab0c5857-5b3d-4ac3-8910-ec6b8c49a0dc Three EAN_13
6636 ab37459c-4368-4684-9ffa-3ac84c69e87a ДомДоктор EAN_13
6637 ab4a36d9-9a11-4575-a6cb-1bd053c6e00f СБА CODE_128
6638 ab6de5de-ea68-47d6-87ad-884e63f63f48 EU COVID-19 Удостоверение за ваксинация - Първа ваксинация QR_CODE
ab73cd57-b075-425f-afe6-868e56207a42 Rewe QR_CODE
6639 ab7a0e82-ad67-40fb-a85f-83cdd10fb44a Depot QR_CODE
6640 ab9d5459-25c3-4040-bff0-b7804375065f Забіяка CODE_128
6641 aba38815-1a55-456f-84b6-0321d8d34102 Андреич EAN_13
6676 b00fc66a-460d-43c9-a5f1-86b0a92b125a Дачник CODE_128
6677 b0210273-794f-427b-bba1-c940a7aac7df Helen CODE_39
6678 b0382f02-57d7-4d7a-a3f1-25ea85507c64 Laser Game Evolution CODE_128
b059eafb-017b-49f0-9d74-62889d8ee777 City of Whitehorse CODE_128
6679 b063caac-e875-4475-8ae6-09a0f979fb85 CLUB SALUTE CODE_39
6680 b07244fc-81d3-492b-a9e5-a813a57eea9c Faciba EAN_8
6681 b07e5b4d-d658-4ba6-9305-d497af7a19ae Nijhof Schoenen ITF
6682 b086ef99-b8b8-45a9-80f5-33a4cb01aba8 spudshed CODE_128
6683 b0973d67-75d0-45e3-9f17-0f4cb80a4824 Motozem CODE_128
b0cfcd52-01a5-4533-8970-6e402e52bcb0 Brikon UPC_A
6684 b0e24b5a-4034-44b9-b22b-2a008d0bcde5 Eurodì CODE_128
6685 b0efcdb1-872a-44f0-961a-a97ee45c7ba8 Porsche Group QR_CODE
6686 b0f4291f-8d68-4071-8d10-cc212b4495cc Iper d'Oriente EAN_13
6707 b2b50b52-83c6-43d3-bb13-008544e2cfa5 Turčianska knižnica EAN_13
6708 b2b7d24b-fdbc-468b-be59-b189d4d5fdf9 Het Certificaat B.V. QR_CODE
6709 b2c03313-9621-4233-9b61-5faa8d2c66e0 JILL STUART EAN_13
b2e520a4-c21a-4ba0-822b-c9ac5fe79f4d BLUME2000 QR_CODE
6710 b2f90e3a-4669-4cd4-8c31-65fbb91dc26e Advantage Pharmacy CODE_128
6711 b31982e9-7c22-4e92-8210-e08eaa123727 Linberg EAN_13
6712 b334927e-9574-457c-9a1f-1b7dd5928304 Farmanoi CODE_128
6713 b359db35-9be6-4369-b796-04b47b4044be Signorizza EAN_13
6714 b36ae43e-8a9c-41f7-8c54-d5ae673c94f5 Bio&Co EAN_13
6715 b43d0b6b-db53-44a7-b518-30cace59c222 British Garden Centres CODE_39
b4606b36-853e-4014-9524-fc07fa6e1d4a Cantina Rauscedo EAN_13
6716 b4663d4f-dd9f-43cc-ba0e-4ce9b0beccd2 Пивлавка EAN_13
6717 b4725b6c-105f-4898-a8d5-ba426ddf9508 Yamazaki CODE_128
6718 b472df21-8f40-44ff-a11f-bbe1d76d6d58 Company Shop Group CODE_39
6720 b4b5583a-3d0e-458e-b800-3b43968a8421 Pirex CODE_128
6721 b4c412d7-ad0b-4afd-aed8-0cf113f445ca Аквафор CODE_128
6722 b4e4e61f-8605-45b6-b672-fce67898ba4e Schuhkay EAN_8
b4f37441-b068-443f-bbfb-fca23c9f5eec Tuttigiorni EAN_13
6723 b4f4c3c3-4ad3-4431-9048-1d6b0e47a649 Tezenis CODE_128
6724 b52836be-a999-4bf8-ba0b-5f2b9b96a509 Youth Hostels Luxembourg CODE_128
6725 b54963ea-a217-434b-b0fa-e8114fd6b999 Пинта EAN_13
b54ed01d-e46b-4f24-8ce9-e08f624f2ddb IGA CODE_128
6726 b5656988-55fb-46c8-91ab-24a5b8422549 Moja Starówka CODE_128
6727 b5695b84-a5cf-4286-87ab-afbe9368be1f Tulipes CODE_39
6728 b5dc4188-75d6-4cf1-b7f2-b0e85a57bc9a Boulangeries Maison Toulorge CODE_128
6757 b9f36613-ed74-441e-abce-66d465b83594 Accademia Italiana della Cucina CODE_39
6758 b9f3eacc-e6d9-43e2-93f0-a1e63221b1fe Più Medical CODE_128
6759 b9fc9d9a-da0e-4fe2-82d8-5d6672263b4b Kačka CODE_128
ba063e76-f5be-4e98-a549-7040a825caf7 Trendevice CODE_128
6760 ba0d23c2-0030-4b68-9bec-6daf6c0db596 Zoomarket CODE_128
6761 ba119be5-7382-453c-93be-625c555aec84 Vitaminas CODE_128
6762 ba5aca20-b0fd-417d-8739-ba9b347c8fff Клиника ЛМС CODE_128
6822 bfcd1bbc-3671-4a2b-99d4-8195c5246644 Metalmark EAN_13
6823 bfe5aac8-ea2d-41e0-ba15-af949e5437d7 Каприз EAN_13
6824 bff24292-b2e3-4322-9462-d5ecc80ce044 Halfords Motoring Club QR_CODE
bricoman-it Bricoman CODE_128
6825 c03f0f47-ce09-4bf1-95f8-c1d0c6f1a8ca Coop EAN_13
6826 c043ef0e-49a9-4f10-877f-974247cf0f16 IperBiobottega EAN_13
6827 c0712c54-a6a6-4695-b9ba-4f5a296b66cf Apothical EAN_13
6871 c51c692c-9e90-48fb-9047-38d3bb7fec2d Мясницкий Ряд CODE_128
6872 c53f804f-29e6-4dc0-9f66-0b9b016cdade Möbel Borst CODE_39
6873 c54a0027-fd79-457e-80eb-e73e1332e3e9 Ni Hao CODE_128
c57001e2-db2b-4f15-8c49-29c6502a86e8 Underwood Meat Company CODE_39
6874 c5846a8f-687a-4de9-a5b5-b575488ac84b Radhe Wholesale & Retail EAN_13
6875 c59fc214-7895-40fc-8f94-9d1d800b66d2 Conradt CODE_39
6876 c5acc06c-0b7d-4e4d-bee3-2134e2fb3b9c Belles Fleurs EAN_13
6910 c925f293-54ee-47ba-ba48-792945c5fa94 Смайл UPC_A
6911 c9295edb-4acf-4e21-b931-d07d1b97e9be Weingärtner Gartencenter EAN_13
6912 c935a5b9-03f1-4194-8aa2-39545b376065 Alpina Intimo CODE_39
c94a90ff-4118-4310-bcf2-588463110b83 knihovna Rosice CODE_128
6913 c964ff0f-5ac9-4976-967f-a55c7ec72e14 Mega Pet Warehouse CODE_128
6914 c998f7d2-6403-46c5-ba21-270195e61cd3 MAX & Co EAN_13
6915 c9d387cb-7a0f-492f-a18d-f4d559ccbade Информат EAN_13
6921 ca650de4-55cc-4df6-8994-3378274bebf5 Moby Dick CODE_128
6922 caa55951-513c-4dca-b0bc-3cb80d85e4f2 PANORAMICO EAN_13
6923 cab2ae0e-10bc-4c58-b159-59f4e8566ca7 Hawkesbury Library Service CODE_39
cad853d8-b9fa-43d6-b37d-39274a571269 Harmony Beauty EAN_8
6924 caddfc56-1d2a-454c-bece-1516b13fa249 Millstream EAN_13
cae4d233-caae-43ff-aaba-affdc99c2d98 ALTERNATURA d.o.o. EAN_13
6925 cae69560-d7e6-4cb7-9ac5-95199c15f9cc Blumenmarkt Dietrich CODE_128
6926 caff4297-2ae6-4315-9329-614c8510eb7f Вместе Выгодно CODE_128
6927 cb03988e-5063-4f48-aef2-9f959f9771a2 DVV CODE_128
cb12d304-17dc-45ba-be1c-5602237320ce Vero Moda QR_CODE
6928 cb1f1114-d1ea-4987-badc-7194d1ab1ca8 Zahradní Centrum CODE_128
6929 cb4ead90-a2f7-41ba-80eb-d4970bed83bd A-Kaart CODABAR
6930 cb7b9237-0c2d-437a-ba38-fa6decca977e 萊爾富 CODE_128
6947 cd26930f-c1ac-4543-a23c-0b90cfa0b1f7 36.6 Здоровье EAN_13
6948 cd38f71a-1a0a-4ba7-ac1d-43974fd42e1a Gel Market EAN_13
6949 cd73cbfb-68f5-4d67-9411-310695558c6b NKC CODE_128
cd840f28-f17c-44ed-9ec7-15b48aa2f0e1 Knihovna Matěje Josefa Sychry EAN_13
6950 cd9d6482-a7dd-4283-a776-f0982ade57a5 Biraghi EAN_13
6951 cdd777ae-6fa4-458d-b7e5-f7c18fff857a EU COVID-19 Vaccinationsintyg QR_CODE
6952 cdd87d70-3e73-48a2-a88a-5e1083e41d0a 1000 мелочей EAN_13
6968 cfce4667-ff5d-44f0-8ba7-fbc44bbf2cb5 Orange Club CODE_128
6969 cfd15fb5-1bac-455b-a5f7-b808390fba06 Сакура Суши EAN_8
6970 cff8ca3d-3620-4098-9b8b-e181f84f6ec8 365 CODE_128
d0153291-afc6-4d0f-8120-74c0b321434a SA Guild of Actors CODE_128
6971 d0540b51-9716-4d59-bc2f-1582b044c029 Wedding Price Card CODE_128
d05b520c-091a-4a9b-84de-689484927109 Lotto Niedersachsen DATA_MATRIX
6972 d0a04b4f-df54-4fcd-b410-87ea5d0986aa EU COVID-19 Očkovací preukaz - Záber na prvé očkovanie QR_CODE
6973 d0b9a6b8-f724-4fe7-8195-e810297505af Chocolaterie Albèrt EAN_13
6974 d1018675-b1b2-44bc-91b6-a985d744836f La Sirena EAN_13
7004 d4115422-7d2e-4001-9c49-4c1353c8b88d Secom EAN_13
7005 d44c1355-2941-4393-aeb8-1a7ad7122f67 HUALI MARKET EAN_13
7006 d4502068-af6b-43ab-b9a5-46dc1899e22a Ябко EAN_13
d4517693-3f1c-45a6-86f2-d60ad19d04e9 U Baristu QR_CODE
7007 d4934c41-3cae-40dd-bd5c-2ca88bdcf9f5 Bau-Buy EAN_8
7008 d4b67cb7-cfbf-4bac-8711-2088b8592e5f Wara EAN_13
7009 d4e44512-0ac2-4d1f-8603-01cd0497416c The co-operative CODE_128
7034 d71e4888-dd0b-4aac-ae5b-937b17ee4149 FQCC EAN_13
7035 d7893d3c-c704-4daa-955b-a97f061d0138 ВАБИ САБИ CODE_128
7036 d78fc335-cab2-40d7-a56c-333f568b36b4 социалочка EAN_13
d7959c14-98b1-4187-9088-494d1a7c5f9f Canningvale CODE_128
7037 d79a1500-206d-407a-b111-724b898aa154 Sportsman's Warehouse CODE_39
7038 d7a18a8f-32b5-43f5-8290-5caf4297aaf8 Halfords Colleague Discount CODE_128
7039 d7b8deb4-4006-4223-9600-331458fade3d Пиватерра EAN_13
7100 df2f73ec-a3c1-4169-b47e-4742bcab704d Digizenz QR_CODE
7101 df3228e8-78d0-42c7-8e45-30089e5267ea Эдисон EAN_13
7102 df53a52a-320b-41ce-8ca0-92da86fcae0c Koutný spol CODE_93
df5ad302-ae2d-47db-b9c9-b5e030d3b553 ALDI CODE_128
7103 df62dc4f-b31a-4615-a289-94410da0ce7b Melkior CODE_128
7104 df668825-ed7c-4f05-b74b-47ec6daa69f0 Breakers CODE_39
7105 dfc5ba69-483e-46ab-8951-3afc7c6d7460 Chaussexpo CODE_128
7112 e0663514-cb9c-413a-ad94-8b83dde796f8 Hommy EAN_13
7113 e0b022eb-bc2b-4553-8345-5869e4f644e2 Life 2.0 CODE_39
7114 e0b2fcbb-e302-4a5e-aa4b-3991fcee7831 KanclerCom EAN_13
e0d0863f-c345-4e3d-baf7-853414056795 Sport 2000 EAN_13
7115 e0db8778-d9a2-4b6c-bece-1b2c4bef11c0 Everyone Fitness CODE_39
7116 e0eadec9-539e-4316-b9bd-9e29d59c1abb Containers for change CODE_128
7117 e132948b-f6a2-44cb-b0c1-d9366151a0e2 BSTRONG CODE_128
7146 e4561f48-5c68-4c2e-88ea-7eeb531a8b41 Lubo CODE_128
7147 e456ceeb-d76a-4684-9e2a-54935e77daa5 Tendenze Calzature EAN_13
7148 e4dfacd9-9513-4231-b09b-51af53151edd Дворик EAN_13
e4f5270b-5a69-41a3-a39e-e3e7e4460ddd OSCARwash QR_CODE
7149 e4f54b47-0238-4fd6-9109-d5ce424981c6 Фламинго EAN_13
7150 e5059f27-dc93-4296-b4d5-1162b692c5ec Северная Звезда CODE_128
7151 e550a9a1-c25b-4658-a9fa-38764c584693 Mon Grand Plaisir QR_CODE
7152 e55b3ee0-ac34-480c-8fd3-c63c3a6ae28c Муниципальная Аптека EAN_13
7153 e55f98ef-9258-4eb7-97fb-7e97d2aacdaa COOK Kitchen QR_CODE
e5616ded-48e7-45d7-b706-a82ef5ab9667 OROCASH CODE_39
7154 e569e534-de02-4cde-a15e-ee5f3e70794e Partyland CODE_128
7155 e570f1ac-a109-4473-8644-9b6daf701d8d najlepšia lekáreň CODE_128
7156 e580263e-726d-4768-a756-1cec4966dbb6 Lower Plenty Hotel CODE_128
7163 e6b4a59b-4d9a-42c6-aae3-5baf468c1999 Evolution EAN_13
7164 e6c68ae5-12f0-4c8b-b5ca-8f725874c704 Полушка EAN_13
7165 e6e830c8-16b9-4382-9b84-93dca76ee66c домаркет CODE_128
7166 e6ece7bc-ac39-45c6-b4f3-c225719c3a0e e6edbb92-d988-4bf3-87f8-e9684b5a3983 Mikado UFS Dispensaries CODE_128 CODE_39
e6edbb92-d988-4bf3-87f8-e9684b5a3983 UFS Healthcare CODE_39
7167 e6efc01d-98bf-478e-a916-f51178a01690 Erborian CODE_128
7168 e6f32c21-af1b-4da3-9c8e-36757cccde3b Sally Beauty CODE_128
7169 e6f9e7a3-2b1f-4ec7-8c99-8c5d16988f56 Iндустрiя краси EAN_13
e71a67d2-6898-4a05-91dd-7ae19095129f FMBrikon UPC_A
7170 e71b01e0-cdf1-4f6b-bee6-d7e2fc9b3a81 Walder Schuhe CODE_128
7171 e760dd3f-aeb2-42a2-bf38-5866c061c2e9 Cash Piscines CODE_128
7172 e79c474b-4ee0-4885-a9eb-7349bdc2bfc9 KIA CODE_39
7200 eab09679-f885-46a1-8f96-3f82ea3b9d82 Niké ITF
7201 eac387cc-ae67-4874-b420-12dae0150abc Woss EAN_13
7202 eacb1c97-e7c2-4ed6-bf64-84db244fbdd5 Медтехника Ортосалон EAN_13
eacdf92e-6601-437d-af01-15156a3ee199 Barossa Co-op QR_CODE
7203 eb01f161-6d42-4ae9-b381-2ca0be34cd6f PiùMe CODE_128
7204 eb2cfbfc-1d25-4ff7-9eb6-743a74c302c4 Клеопатра EAN_13
7205 eb32c9d7-80b8-4147-942f-3b94ad7dd8fd Brico Pro EAN_13
7253 ef8b1a62-353b-44e3-bfba-b1331b6509ab Evoluphar CODE_128
7254 ef8f92d7-a5a1-441e-8e91-133b64da57e5 Anabel Arto CODE_128
7255 efdfda06-b4ad-4bd6-ad00-41d6ab9aeaf8 Profi Center CODE_128
effbec31-0ed6-4eb3-969b-17d99d340d78 Sedici Piadina CODE_128
7256 f01c0047-5952-4805-a48b-4d455d833777 ХозСити EAN_13
7257 f032c0d2-9f71-47fa-9574-8970a917b63b Brianza Biblioteche EAN_13
7258 f0637a9d-47a8-44a0-8342-c409b6c55b6b Baby EAN_13
7269 f1df75b9-1d7a-4cba-9e9d-f4411f4ea48b Индейкин Дом EAN_13
7270 f1e508d1-b901-45ba-9ace-b98e96c8fd38 Dalbe EAN_13
7271 f1f1c15f-8a75-4a18-9b01-251778c8fb45 Optika Anda CODE_128
f1fe28ce-0c9a-4b64-a455-c9f14c3fa2be PME Legend CODE_128
7272 f2153289-2b50-463f-91d4-37ceb62f304b Колесо2 CODE_39
7273 f21a2eea-3a15-4765-8ea6-3f1ec10fdd87 EU COVID-19 Vaccinationsattest - Anden vaccination Skudt QR_CODE
7274 f2292778-e0fe-4925-b939-b4716342fa44 Tread & Miller CODE_128
7283 f2b9fa76-c78f-4d2c-821f-70678bc8d4d5 Parfümerie Becker EAN_8
7284 f2c8f722-9c5f-423d-9989-deca7901aa11 Poetry CODE_128
7285 f2d3f68c-7b77-4464-91d2-3162e74bea48 Neinver EAN_13
f2dc6f84-01cc-4e13-aec2-2ce88367a27f Ljekarne Prima Pharme CODE_128
7286 f3189d64-dd39-468b-872d-3bb70e4d416c The Watergardens Hotel CODE_128
7287 f3287ab2-0308-42f8-92dc-3147456a4a69 НУЖНО! EAN_13
f359407e-234b-4fbb-af07-f3b293a51bbb MaRinella EAN_13
7288 f35a3882-27b2-417d-8093-e87f8f25509a Первый Семейный CODE_128
7289 f3852d29-47fe-4528-83cd-5ae7b31fdb0e Kraus PDF_417
7290 f3e63893-802b-4e40-9480-f3fbfda0a3e4 Аптека живика EAN_13
7297 f4aefdf7-e66f-4980-a0ee-7e6f1afcc8df Color Line EAN_13
7298 f4b16522-478d-4c84-bfa5-e0825ebf4917 bonVito PDF_417
7299 f4d0cac3-70a0-43dc-a204-fe5fd9ab428f KüstenCard Flexi CODE_128
f4e09fa3-b712-4be5-915b-002082002246 Club VW Suisse QR_CODE
7300 f5002bd9-8e95-4c11-8a7c-e3d2fae42fe3 BCAA CODE_128
7301 f5356dd8-8762-4f36-8c50-f7383eccb840 Twój Market EAN_13
7302 f546e937-86b4-40eb-98cb-9a348d5dccec МаксиФлора EAN_13
7332 f8fa2370-261e-4e19-ba9c-46cd33ead64d Agri Sud Est EAN_13
7333 f90691bf-2879-4424-b2d5-5c09ee9ff700 Кроха CODE_128
7334 f915ed01-85f9-4a61-921b-0d33eaf6fd23 ЗооОптТорг.Рф EAN_13
f9223231-26b6-4f86-9d2e-5756488c2e74 Jack & Jones QR_CODE
7335 f93e7a30-4351-47e5-b8b2-3a9546ad9bb8 BOTICINAL POWERSANTÉ EAN_13
7336 f940a1b8-c04b-4541-b307-7fdc1fa8eb91 Veggie Grill CODE_128
7337 f9447f67-140e-402d-9a27-e7c11cefebda Eleganza CODE_128
7350 fa11b2c7-a768-4d4b-b03d-c845df6cb341 Terra Viva CODE_128
7351 fa1670c0-1713-44f0-b57d-902b278ba741 нива EAN_13
7352 fa24b789-4774-41e1-8a52-216efc9de8ba foodmaster QR_CODE
fa3bdecd-2216-4d2b-b39d-fb14681f62fc Fusion Gyms CODE_128
7353 fa5593eb-2f35-4a7f-8c69-1c4a726759be Форум EAN_13
7354 fa7407ee-0ddd-4727-bfc7-05c206c159d0 Toto EAN_13
7355 fa7f3968-0cba-4adb-b1bb-fb2083b98b2f Der Bäcker Eifler QR_CODE
7360 fadd868f-b34b-4604-8a24-c7fbcd8ea573 Big Marlin EAN_13
7361 fae896a0-9c57-4ff8-be30-195fbf137a0b Lotteria degli Scontrini CODE_128
7362 fafa23c9-5cda-4fb8-aab5-6faebc6386a8 NETTO CODE_128
fb340faf-4fe5-4446-b811-217d615f5514 Abbonamento Musei QR_CODE
7363 fb507b68-ecf4-4397-969a-23e2427f76f2 Veritas EAN_13
7364 fb5e84a1-5e9f-4fa5-ad36-c6060927c415 BIT BY BIT CODE_128
7365 fb6edc61-a282-4217-9b44-ac2611b5977c Kierrätyskeskus CODE_128
7400 fe54303c-8e1c-4c62-8ee6-b9485e333419 Liverpool Library CODE_128
7401 fe889ad0-ea52-4069-a051-b5ceb4c4b4e7 Аптека Гермес EAN_13
7402 febc239e-ed07-45ac-905d-b6048a203784 Scarpamondo EAN_13
fed489b7-1d23-4b3f-b20f-52c229575de0 Autowaspark Kuzee QR_CODE
7403 fee32f93-2fe4-4fa1-ab62-159bdc375668 Покупочка CODE_128
7404 fefcdd70-4aa8-4f78-b9e6-1dc18f9cd731 Button Blue EAN_13
ff50e5dc-1f3a-43a7-a55d-4a7d96b12757 Le Guidon Niortais CODE_128
7405 ff92fe3e-1b38-409f-9701-ee7665fccb5e EU COVID-19 Certificado de Vacinação - Primeira injeção QR_CODE
7406 ff9fd337-4765-4ad1-90a3-62e4a78dc3ec Нияма QR_CODE
7407 ffa57152-01bd-48bc-be45-46bac303c450 Мед Сервис CODE_128

View File

@@ -119,8 +119,8 @@
<string name="settings_blue_theme">أزرق</string>
<string name="settings_sky_blue_theme">أزرق سماوي</string>
<string name="settings_green_theme">أخضر</string>
<string name="settings_grey_theme">رمادي</string>
<string name="settings_brown_theme">بني</string>
<string name="app_contributors">أصبح ممكنًا بواسطة: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="sort">فرز</string>
<string name="showMoreInfo">اظهر المعلومات</string>
<string name="reverse">... بترتيب معكوس</string>
@@ -237,6 +237,9 @@
<string name="importLoyaltyCardKeychainMessage">حدد ملفك <i>LoyaltyCardKeychain.csv</i> التصدير من Loyalty Card Keychain للاستيراد.
\nقم بإنشائه من قائمة الاستيراد / التصدير في Loyalty Card Keychain بالضغط على تصدير هناك أولاً.</string>
<string name="importStocard">الاستيراد من Stocard</string>
<string name="privacy_policy_popup_text">إشعار سياسة الخصوصية (مطلوب من قبل بعض متاجر التطبيقات):
\n
\nلا يتم جمع أي بيانات على الإطلاق ، والتي يمكن لأي شخص تأكيدها لأن تطبيقنا هو برنامج حر.</string>
<string name="failedGeneratingShareURL">تعذر إنشاء عنوان URL قابل للمشاركة. الرجاء الإبلاغ عن هذا.</string>
<string name="help_translate_this_app">ساعد في ترجمة هذا التطبيق</string>
<string name="on_google_play">على Google Play</string>
@@ -247,15 +250,23 @@
<string name="barcodeLongPressMessage">يمكن فتح صور فقط في تطبيق معرض الصور</string>
<string name="failedToOpenUrl">ثبت متصفح ويب أولاً</string>
<string name="welcome">مرحبا بك في كاتيما</string>
<string name="updateBalanceTitle">كم أنفقت أو استلمت؟</string>
<string name="updateBalanceTitle">كم أنفقت؟</string>
<string name="currentBalanceSentence">الرصيد الحالي: <xliff:g> %s </xliff:g></string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="zero">عرض الأرشيف (<xliff:g>%1$d</xliff:g> بطاقة)</item>
<item quantity="one">عرض الأرشيف (<xliff:g>%1$d</xliff:g> بطاقة)</item>
<item quantity="two">عرض الأرشيف (<xliff:g>%1$d</xliff:g> بطاقتين)</item>
<item quantity="few">عرض الأرشيف (<xliff:g>%1$d</xliff:g> بطاقات)</item>
<item quantity="many">عرض الأرشيف (<xliff:g>%1$d</xliff:g> بطاقات)</item>
<item quantity="other">عرض الأرشيف (<xliff:g>%1$d</xliff:g> بطاقات)</item>
</plurals>
<string name="importCards">استيراد البطاقات</string>
<string name="newBalanceSentence">الرصيد الجديد: <xliff:g>%s</xliff:g></string>
<string name="cameraPermissionDeniedTitle">تعذر الوصول إلى الكاميرا</string>
<string name="noCameraPermissionDirectToSystemSetting">لمسح الباركود، ستحتاج Catima إلى الوصول إلى الكاميرا. اضغط هنا لتغيير إعدادات الأذونات.</string>
<string name="updateBalance">تحديث الرصيد</string>
<string name="updateBalanceHint">أدخل المبلغ</string>
<string name="storageReadPermissionRequired">الصلاحيه للوصل للتخزين مطلوبة لهذا الاجراء</string>
<string name="storageReadPermissionRequired">الصلاحيه للوصل للتخزين مطلوبة لهذا الاجراء</string>
<string name="validFromDate">عربيه</string>
<string name="cameraPermissionRequired">إذن للوصول إلى الكاميرا اللازمة لهذا الإجراء…</string>
<string name="anyDate">أي تاريخ</string>
@@ -298,22 +309,5 @@
<string name="enter_card_id">أدخل رقم الهوية أو النص الموجود على بطاقتك</string>
<string name="addWithoutBarcode">إضافة بدون باركود</string>
<string name="field_must_not_be_empty">يجب ألا يكون الحقل فارغا</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">التدوير دائمًا ( تجاهل إعدادات النظام)</string>
<string name="add_manually_warning_title">الفحص موصى به</string>
<string name="continue_">استمر</string>
<string name="spend">انفق</string>
<string name="receive">استلم</string>
<string name="amountParsingFailed">كمية غير صحيحة</string>
<string name="add_manually_warning_message">في بعض المتاجر قيمة الباركود تختلف عن الرقم الموجود على البطاقة. لهذا السبب إدخال الباركود يدوياً لن ينجح دائماً. من المستحسن فحص الباركود بكاميرا بدلا من ذالك. هل انت مُصِر على الاستكمال؟</string>
<string name="addFromPdfFile">تحديد ملف PDF</string>
<string name="errorReadingFile">لا يمكن قراءة الملف</string>
<string name="failedLaunchingFileManager">لم يتم العثور على مدير ملفات مدعوم</string>
<string name="multipleBarcodesFoundPleaseChooseOne">اي من الـbarcodes تريد استخدامه؟</string>
<string name="pageWithNumber">صفحة <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">يبدوا أن جهازك لا يمتلك كاميرا. إذا كان يمتلكها، أطفئ الجهاز وحاول مرة اخرى. اذا لم ينجح ذلك، أضغط على زر \"المزيد من الأختيارات\" في الأسفل لإضافة الباركود بطريقة أخرى.</string>
<string name="importCancelled">تم الغاء الاستيراد</string>
<string name="exportCancelled">تم الغاء الاستخراج</string>
<string name="useFrontImage">استخدام صورة أمامية</string>
<string name="useBackImage">استخدم صورة خلفية</string>
<string name="app_name">كاتيما</string>
</resources>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="storeName">Nome</string>
<string name="note">Nota</string>
<string name="noMatchingGiftCards">Nun hai nengún resultáu. Prueba a camudar la busca.</string>
@@ -24,6 +24,10 @@
<string name="save">Guardar</string>
<string name="edit">Editar</string>
<string name="delete">Desaniciar</string>
<plurals name="deleteCardsTitle">
<item quantity="one"></item>
<item quantity="other"></item>
</plurals>
<string name="unstar">Quitar de Favoritos</string>
<string name="cancel">Encaboxar</string>
<string name="importFailed">Nun se pudo facer la importación</string>

View File

@@ -51,6 +51,9 @@
<string name="importFidme">Внасяне от FidMe</string>
<string name="exportOptionExplanation">Данните ще бъдат запазени на място по ваш избор.</string>
<string name="accept">Приемане</string>
<string name="privacy_policy_popup_text">Политика за личните данни (необходима от някои магазини за приложения):
\n
\nНЕ СЕ СЪБИРАТ ИЗОБЩО НИКАКВИ ДАННИ, което може да бъде потвърдено, защото приложението е със свободен код.</string>
<string name="privacy_policy">Политика за личните данни</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="turn_flashlight_off">Изключва светкавицата</string>
@@ -75,7 +78,7 @@
<string name="groups">Списъци</string>
<string name="enter_group_name">Въведете име на списъка</string>
<string name="intent_import_card_from_url_share_text">Искам да споделя тази карта с вас</string>
<string name="settings_display_barcode_max_brightness">Максимална яркост на екрана</string>
<string name="settings_display_barcode_max_brightness">Максимална яркост при видим щрихкод</string>
<string name="settings_keep_screen_on">Без изключване на екрана</string>
<string name="settings_disable_lockscreen_while_viewing_card">Без заключване на екрана</string>
<string name="settings_dark_theme">Тъмна</string>
@@ -152,8 +155,8 @@
<item quantity="one">Желаете ли <xliff:g>%d</xliff:g> карта да бъде премахната\?</item>
<item quantity="other">Желаете ли тези <xliff:g>%d</xliff:g> карти да бъдат премахнати\?</item>
</plurals>
<string name="app_contributors">Осъществено от: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="settings_brown_theme">Кафяво</string>
<string name="settings_grey_theme">Сиво</string>
<string name="settings_green_theme">Зелено</string>
<string name="settings_sky_blue_theme">Небесносиньо</string>
<string name="settings_blue_theme">Синьо</string>
@@ -203,7 +206,7 @@
</plurals>
<string name="settings_oled_dark">Черен фон за тъмната тема</string>
<string name="include_if_asking_support">Ако искате да потърсите поддръжка, включете следната информация:</string>
<string name="settings_card_orientation">Завъртане на екрана</string>
<string name="settings_card_orientation">Завъртане на щрихкода</string>
<string name="settings_follow_system_orientation">Според системата</string>
<string name="settings_portrait_orientation">Портрет</string>
<string name="settings_landscape_orientation">Пейзаж</string>
@@ -222,10 +225,14 @@
<string name="nextCard">Следваща</string>
<string name="failedToOpenUrl">Първо инсталирайте уеб браузър</string>
<string name="welcome">Добре дошли при Катима</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Преглед на архива (<xliff:g>%1$d</xliff:g> карта)</item>
<item quantity="other">Преглед на архива (<xliff:g>%1$d</xliff:g> карти)</item>
</plurals>
<string name="barcodeLongPressMessage">В приложението галерия могат да бъдат отваряни само изображения</string>
<string name="failedToRetrieveImageFile">Не е възможно извличане на изображение</string>
<string name="noCameraPermissionDirectToSystemSetting">За да сканирате щрихкодове с Catima е необходим достъп до камерата. За да промените разрешението докоснете тук.</string>
<string name="updateBalanceTitle">Колко е похарчено или получено?</string>
<string name="updateBalanceTitle">Каква е промяната\?</string>
<string name="updateBalanceHint">Въведете стойност</string>
<string name="newBalanceSentence">Нов баланс: <xliff:g>%s</xliff:g></string>
<string name="cameraPermissionDeniedTitle">Камерата е недостъпна</string>
@@ -258,7 +265,7 @@
<string name="settings_disable_lockscreen_while_viewing_card_summary">Без заключване на екрана при преглед на карта</string>
<string name="settings_allow_content_provider_read_summary">Приложенията ще искат разрешение, за да получат достъп</string>
<string name="settings_oled_dark_summary">Намалява разхода на батерия от OLED дисплеи</string>
<string name="settings_category_title_cards">Изглед с карти</string>
<string name="settings_category_title_cards">Карти</string>
<string name="settings_category_title_general">Общи</string>
<string name="settings_category_title_privacy">Поверителност</string>
<string name="settings_keep_screen_on_summary">Спира автоматичното заключване на екрана при преглед на карти</string>
@@ -275,23 +282,4 @@
<string name="addWithoutBarcode">Добавяне на карта без щрихкод</string>
<string name="field_must_not_be_empty">Полето не трябва да е празно</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Винаги да се завърта (пренебрегва системната настройка)</string>
<string name="continue_">Продължаване</string>
<string name="add_manually_warning_title">Препоръчително е да сканирате</string>
<string name="add_manually_warning_message">Стойностите от щрихкода и отбелязаните на картата числа в някои случаи се различават. По тази причина е при ръчно въвеждане картата може да не работи. Силно препоръчително е да сканирате щрихкода с камерата. Желаете ли да продължите въпреки това?</string>
<string name="amountParsingFailed">Неприемлива сума</string>
<string name="spend">Похарчено</string>
<string name="receive">Получено</string>
<string name="pageWithNumber">Страница <xliff:g>%d</xliff:g></string>
<string name="addFromPdfFile">Изберете PDF</string>
<string name="errorReadingFile">Файлът не може да бъде прочетен</string>
<string name="failedLaunchingFileManager">Не е намерено приложение за управление на файлове</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Кой от намерените щрихкодове желаете да бъде използван?</string>
<string name="noCameraFoundGuideText">Изглежда, устройството няма камера. Ако има опитайте да рестартирате. В противен случай използвайте бутона „Още“, за да добавите шрихкод по друг начин.</string>
<string name="importCancelled">Внасянето е спряно</string>
<string name="exportCancelled">Изнасянето е спряно</string>
<string name="useFrontImage">Използване на предната страна</string>
<string name="useBackImage">Използване на задната страна</string>
<string name="settings_use_volume_keys_navigation">Сменяне на картите с бутоните за звука</string>
<string name="settings_use_volume_keys_navigation_summary">Бутоните за силата на звука сменят видимата карта</string>
</resources>

View File

@@ -173,6 +173,9 @@
<string name="chooseExpiryDate">মেয়াদ শেষ হওয়ার তারিখ মনোনীত করুন</string>
<string name="moveBarcodeToTopOfScreen">বারকোডটি স্ক্রিনের উপরে উঠিয়ে দিন</string>
<string name="errorReadingImage">ছবিটি স্ক্যান করা যাচ্ছে না</string>
<string name="privacy_policy_popup_text">ব্যক্তিগত তথ্যের গোপনীয়তা নীতি নোটিশ (কিছু অ্যাপ স্টোরের এটি লাগে):
\n
\nকোন তথ্য একেবারেই সংগ্রহ করা হয় না, যা যে কেউ নিশ্চিত করতে পারবেন কারন আমাদের অ্যাপ মুক্ত সফটওয়্যার।</string>
<string name="balance">ব্যালান্স</string>
<string name="points">পয়েন্ট</string>
<string name="chooseImportType">এখান থেকে তথ্য আমদানি করুন</string>
@@ -192,6 +195,10 @@
<item quantity="other"><xliff:g>%1$d</xliff:g> cards (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
</plurals>
<string name="nextCard">পরবর্তী</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">সংরক্ষণাগার দেখুন (<xliff:g>%1$d</xliff:g> কার্ড)</item>
<item quantity="other">সংরক্ষণাগার দেখুন (<xliff:g>%1$d</xliff:g> কার্ডগুলি)</item>
</plurals>
<string name="failedToOpenUrl">প্রথমে একটি ওয়েব ব্রাউজার ইন্সটল করুন</string>
<string name="newBalanceSentence">নতুন ব্যালেন্স: <xliff:g>%s</xliff:g></string>
<string name="chooseValidFromDate">তারিখ থেকে বৈধ নির্বাচন করুন</string>
@@ -200,7 +207,6 @@
<string name="credits">ক্রেডিট</string>
<string name="help_translate_this_app">এই অ্যাপটি অনুবাদ করতে সাহায্য করুন</string>
<string name="showMoreInfo">তথ্য দেখান</string>
<string name="app_contributors">এর দ্বারা সম্ভব হয়েছে: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="importCards">কার্ড আমদানি করুন</string>
<string name="importFidmeMessage">FidMe থেকে আমদানি করতে আপনার <i>fidme-export-request-xxxxxx.zip</i> রপ্তানি নির্বাচন করুন এবং পরে বারকোডের ধরন ম্যানুয়ালি নির্বাচন করুন।
\nআপনার FidMe প্রোফাইল থেকে ডেটা সুরক্ষা নির্বাচন করে এবং তারপর প্রথমে আমার ডেটা বের করুন টিপে এটি তৈরি করুন।</string>
@@ -212,6 +218,7 @@
\nপ্রথমে ভাউচার ভল্টে এক্সপোর্ট টিপে এটি তৈরি করুন।</string>
<string name="settings_oled_dark">অন্ধকার থিমের জন্য খাঁটি কালো পটভূমি</string>
<string name="setIcon">আইকন সেট করুন</string>
<string name="settings_grey_theme">ধূসর</string>
<string name="updateBalance">ব্যালেন্স আপডেট করুন</string>
<string name="barcodeLongPressMessage">গ্যালারি অ্যাপে শুধুমাত্র ছবি খোলা যাবে</string>
<string name="translate_platform">Weblate-এ</string>
@@ -235,7 +242,7 @@
<string name="unarchive">সংরক্ষণাগারমুক্ত করুন</string>
<string name="archived">কার্ড সংরক্ষণাগারভুক্ত</string>
<string name="welcome">Catima-তে স্বাগতম</string>
<string name="updateBalanceTitle">আপনি কত খরচ করেছেন?</string>
<string name="updateBalanceTitle">আপনি কত খরচ করেছেন\?</string>
<string name="updateBalanceHint">পরিমান লিখুন</string>
<string name="currentBalanceSentence">বর্তমান ব্যালেন্স: <xliff:g>%s</xliff:g></string>
<string name="show_name_below_image_thumbnail">ছবির থাম্বনেইল এর নিচে নামটি দেখান</string>

View File

@@ -12,6 +12,7 @@
<string name="about">সম্পর্কিত</string>
<string name="card">কার্ড</string>
<string name="yes">হ্যাঁ</string>
<string name="settings_grey_theme">ধূসর</string>
<string name="ok">ঠিক আছে</string>
<string name="sendLabel">পাঠান…</string>
<string name="sort_by_name">নাম</string>
@@ -75,4 +76,4 @@
<string name="exportFailedTitle">রপ্তানি ব্যর্থ</string>
<string name="settings_card_orientation">বারকোড অভিমুখ (ওরিয়েন্টেশন)</string>
<string name="app_name">ক্যাটিমা</string>
</resources>
</resources>

View File

@@ -2,13 +2,13 @@
<resources>
<string name="save">Snimi</string>
<string name="cancel">Odustani</string>
<string name="unstar">Ukloni iz omiljenih</string>
<string name="star">Dodaj u omiljene</string>
<string name="barcodeType">Tip barkoda</string>
<string name="note">Zabilješka</string>
<string name="unstar">Ukloni sve omiljene</string>
<string name="star">Omiljene</string>
<string name="barcodeType">Barcode tip</string>
<string name="note">Bilježnica</string>
<string name="storeName">Ime</string>
<string name="noMatchingGiftCards">Nema rezultata. Pokušaj promijeniti pretragu.</string>
<string name="noGiftCards">Kliknite + Plus dugme da dodate kartu ili uvezete nešto iz menija prvo.</string>
<string name="noGiftCards">Kliknite + Plus dugme da dodate kartu ili uvozite nešto iz menija prvo.</string>
<string name="action_add">Dodaj</string>
<string name="all">Sve</string>
<string name="noGroupCards">Ova grupa ne sadrži nikakve karte</string>
@@ -104,6 +104,4 @@
<string name="importOptionApplicationExplanation">Koristi bilo koju aplikaciju ili Vašu omiljenu aplikaciju da bi otvorili file.</string>
<string name="importOptionApplicationButton">Koristi drugu aplikaciju</string>
<string name="about">O</string>
<string name="noBarcode">Nema barkoda</string>
<string name="deleteTitle">Obriši karticu</string>
</resources>
</resources>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_add">Přidat</string>
<string name="noGiftCards">Klepněte na tlačítko plus (+) pro přidání karty nebo naimportujete karty z nabídky (⋮).</string>
<string name="noGiftCards">Klepněte na tlačítko Plus (+) pro přidání karty nebo naimportujete karty z nabídky (⋮).</string>
<string name="storeName">Název</string>
<string name="note">Poznámka</string>
<string name="cardId">ID karty</string>
@@ -87,6 +87,7 @@
<string name="moveDown">Přesunout dolů</string>
<string name="moveUp">Přesunout nahoru</string>
<string name="settings_brown_theme">Hnědá</string>
<string name="settings_grey_theme">Šedá</string>
<string name="settings_green_theme">Zelená</string>
<string name="settings_sky_blue_theme">Azurová</string>
<string name="settings_blue_theme">Modrá</string>
@@ -134,6 +135,9 @@
\nVytvoříte jej z nabídky Import/Export jiné aplikace Catima tak, že v ní nejprve stisknete tlačítko Exportovat.</string>
<string name="importCatima">Import z Catima</string>
<string name="accept">Přijmout</string>
<string name="privacy_policy_popup_text">Oznámení o zásadách ochrany osobních údajů (vyžadováno některými obchody s aplikacemi):
\n
\nNejsou shromažďovány žádné údaje, což může potvrdit každý, protože naše aplikace je svobodný software.</string>
<string name="privacy_policy">Zásady soukromí</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="chooseImportType">Importovat data z</string>
@@ -159,14 +163,13 @@
<string name="groups">Skupiny</string>
<string name="enter_group_name">Zadejte název skupiny</string>
<string name="exportSuccessful">Data exportována</string>
<string name="settings_display_barcode_max_brightness">Rozjasnit obrazovku</string>
<string name="settings_display_barcode_max_brightness">Vysoký jas při zobrazení čárového kódu</string>
<string name="starImage">Hvězdička u oblíbených</string>
<plurals name="selectedCardCount">
<item quantity="one">Vybrána <xliff:g>%d</xliff:g> karta</item>
<item quantity="few">Vybrány <xliff:g>%d</xliff:g> karty</item>
<item quantity="other">Vybráno <xliff:g>%d</xliff:g> karet</item>
</plurals>
<string name="app_contributors">Přispěli: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="noGroupCards">Tato skupina je prázdná</string>
<string name="sort_by">Seřadit podle</string>
<string name="reverse">…v obráceném pořadí</string>
@@ -213,7 +216,7 @@
<string name="archive">Archivovat</string>
<string name="unarchive">Vrátit z archivu</string>
<string name="unarchived">Karta vrácena z archivu</string>
<string name="settings_card_orientation">Orientace obrazovky</string>
<string name="settings_card_orientation">Orientace čárového kódu</string>
<string name="settings_landscape_orientation">Na šířku</string>
<string name="duplicateCard">Duplikovat</string>
<string name="archived">Karta archivována</string>
@@ -227,6 +230,11 @@
<string name="nextCard">Následující</string>
<string name="failedToOpenUrl">Nejprve nainstalujte webový prohlížeč</string>
<string name="welcome">Vítejte v Catima</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Zobrazit archiv (<xliff:g>%1$d</xliff:g> karta)</item>
<item quantity="few">Zobrazit archiv (<xliff:g>%1$d</xliff:g> karty)</item>
<item quantity="other">Zobrazit archiv (<xliff:g>%1$d</xliff:g> karet)</item>
</plurals>
<string name="barcodeLongPressMessage">V aplikaci pro galerii mohou být otevírány pouze obrázky</string>
<string name="failedToRetrieveImageFile">Nepodařilo se získat soubor obrázku</string>
<string name="cameraPermissionDeniedTitle">Nelze získat přístup k fotoaparátu</string>
@@ -234,7 +242,7 @@
<string name="updateBalance">Aktualizovat zůstatek</string>
<string name="currentBalanceSentence">Současný zůstatek: <xliff:g>%s</xliff:g></string>
<string name="noCameraPermissionDirectToSystemSetting">Pro skenování čárových kódů bude Catima potřebovat přístup k fotoaparátu. Klepněte zde pro změnu nastavení oprávnění.</string>
<string name="updateBalanceTitle">Kolik jste utratil/a nebo obdržel/a?</string>
<string name="updateBalanceTitle">Kolik jste utratil\?</string>
<string name="updateBalanceHint">Zadejte výši</string>
<string name="newBalanceSentence">Nový zůstatek: <xliff:g>%s</xliff:g></string>
<string name="storageReadPermissionRequired">Pro tuto akci je potřeba oprávnění ke čtení úložiště…</string>
@@ -265,7 +273,7 @@
<string name="settings_category_title_privacy">Soukromí</string>
<string name="settings_display_barcode_max_brightness_summary">U některých čteček je to potřeba</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Při prohlížení karty zabránit zamčení obrazovky</string>
<string name="settings_category_title_cards">Zobrazení karty</string>
<string name="settings_category_title_cards">Karty</string>
<string name="settings_category_title_general">Obecné</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os a přispěvatelé</string>
<string name="app_copyright_short">Copyright © Sylvia van Os a přispěvatelé</string>
@@ -281,23 +289,4 @@
<string name="addWithoutBarcode">Přidat kartu bez čárového kódu</string>
<string name="field_must_not_be_empty">Položka nesmí být prázdná</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Vždy otáčet (ignoruje nastavení systému)</string>
<string name="continue_">Pokračovat</string>
<string name="add_manually_warning_title">Doporučuje se skenování</string>
<string name="add_manually_warning_message">V některých obchodech se hodnota čárového kódu liší od čísla napsaného na kartě. Z tohoto důvodu nemusí ruční zadání čárového kódu vždy fungovat. Důrazně doporučujeme místo toho naskenovat čárový kód pomocí fotoaparátu. Chcete přesto pokračovat?</string>
<string name="spend">Utratit</string>
<string name="receive">Obdržet</string>
<string name="amountParsingFailed">Neplatné množství</string>
<string name="addFromPdfFile">Vybrat soubor PDF</string>
<string name="errorReadingFile">Soubor nelze přečíst</string>
<string name="pageWithNumber">Stránka <xliff:g>%d</xliff:g></string>
<string name="multipleBarcodesFoundPleaseChooseOne">Který z nalezených čárových kódů chcete použít?</string>
<string name="failedLaunchingFileManager">Nelze nalézt podporovaný správce souborů</string>
<string name="noCameraFoundGuideText">Zdá se, že vaše zařízení nemá fotoaparát. Pokud ano, zkuste zařízení restartovat. V opačném případě použijte tlačítko Další možnosti a přidejte čárový kód jiným způsobem.</string>
<string name="importCancelled">Import zrušen</string>
<string name="exportCancelled">Export zrušen</string>
<string name="useBackImage">Použijte předchozí obrázek</string>
<string name="useFrontImage">Použijte přední obrázek</string>
<string name="settings_use_volume_keys_navigation_summary">Pomocí tlačítek hlasitosti můžete změnit, která karta se zobrazí</string>
<string name="settings_use_volume_keys_navigation">Přepínat karty pomocí tlačítek hlasitosti</string>
</resources>

View File

@@ -12,16 +12,16 @@
<string name="edit">Bearbeiten</string>
<string name="delete">Löschen</string>
<string name="confirm">Bestätigen</string>
<string name="star">Zu Favoriten hinzufügen</string>
<string name="unstar">Aus Favoriten entfernen</string>
<string name="star">Zu den Favoriten hinzufügen</string>
<string name="unstar">Aus den Favoriten entfernen</string>
<string name="ok">OK</string>
<string name="sendLabel">Senden…</string>
<string name="sendLabel">Senden </string>
<string name="editCardTitle">Karte bearbeiten</string>
<string name="addCardTitle">Karte hinzufügen</string>
<string name="addCardTitle">Neue Karte</string>
<string name="scanCardBarcode">Barcode scannen</string>
<string name="cardShortcut">Kartenkürzel</string>
<string name="cardShortcut">Shortcut zu einer Karte</string>
<string name="noCardsMessage">Füge zuerst eine Karte hinzu</string>
<string name="noCardExistsError">Konnte die Karte nicht finden</string>
<string name="noCardExistsError">Diese Karte konnte nicht gefunden werden</string>
<string name="importExport">Import/Export</string>
<string name="exportName">Export</string>
<string name="importExportHelp">Wenn du deine Daten sicherst, kannst du sie auf ein anderes Gerät übertragen.</string>
@@ -33,12 +33,12 @@
<string name="exportFailed">Export konnte nicht durchgeführt werden</string>
<string name="importing">Importiere…</string>
<string name="exporting">Exportiere…</string>
<string name="importOptionFilesystemTitle">Aus Dateisystem importieren</string>
<string name="importOptionFilesystemExplanation">Wähle eine bestimmte Datei aus dem Dateisystem aus.</string>
<string name="importOptionFilesystemButton">vom Dateisystem</string>
<string name="importOptionApplicationTitle">Andere App verwenden</string>
<string name="importOptionApplicationExplanation">Benutze eine beliebige App oder deinen bevorzugten Dateimanager zur Dateiauswahl.</string>
<string name="importOptionApplicationButton">Andere App verwenden</string>
<string name="importOptionFilesystemTitle">Importiere aus dem Dateisystem</string>
<string name="importOptionFilesystemExplanation">Wähle eine Datei vom Dateisystem aus.</string>
<string name="importOptionFilesystemButton">Wähle vom Dateisystem</string>
<string name="importOptionApplicationTitle">Andere Anwendungen</string>
<string name="importOptionApplicationExplanation">Beliebige Anwendung oder deinen bevorzugten Dateimanager zur Dateiauswahl verwenden.</string>
<string name="importOptionApplicationButton">Aus anderer Anwendung</string>
<string name="about">Über</string>
<string name="app_license">Freie Software, lizensiert unter der GPLv3+</string>
<string name="about_title_fmt">Über <xliff:g id="app_name">%s</xliff:g></string>
@@ -46,7 +46,7 @@
<string name="selectBarcodeTitle">Barcode auswählen</string>
<string name="thumbnailDescription">Vorschaubild</string>
<string name="settings">Einstellungen</string>
<string name="settings_display_barcode_max_brightness">Displayhelligkeit erhöhen</string>
<string name="settings_display_barcode_max_brightness">Displayhelligkeit in der Barcodeansicht erhöhen</string>
<string name="exportSuccessful">Daten exportiert</string>
<string name="importSuccessful">Daten importiert</string>
<string name="intent_import_card_from_url_share_text">Ich würde gerne diese Karte mit dir teilen</string>
@@ -66,12 +66,12 @@
<string name="noGroups">Klicke auf das Pluszeichen +, um eine Gruppe hinzuzufügen.</string>
<string name="noGroupCards">Diese Gruppe ist leer</string>
<string name="groups">Gruppen</string>
<string name="enter_group_name">Gruppennamen eingeben</string>
<string name="enter_group_name">Gib einen Gruppennamen ein</string>
<string name="leaveWithoutSaveConfirmation">Beenden ohne zu speichern\?</string>
<string name="leaveWithoutSaveTitle">Beenden</string>
<string name="failedOpeningFileManager">Installiere zuerst einen Dateimanager.</string>
<string name="noBarcode">Kein Barcode</string>
<string name="addManually">Barcode manuell eingeben</string>
<string name="addManually">Code manuell eingeben</string>
<string name="moveDown">Nach unten verschieben</string>
<string name="moveUp">Nach oben verschieben</string>
<plurals name="groupCardCount">
@@ -95,23 +95,28 @@
<string name="expiryStateSentence">Läuft ab: <xliff:g>%s</xliff:g></string>
<string name="settings_disable_lockscreen_while_viewing_card">Sperrbildschirm verhindern</string>
<string name="settings_keep_screen_on">Bildschirm aktiv lassen</string>
<string name="privacy_policy_popup_text">Hinweis zum Datenschutz (oft gefordert):
\n
\nKEINE DATEN WERDEN GESAMMELT, was jeder bestätigen kann, da unsere Anwendung eine freie Software ist.</string>
<string name="accept">Annehmen</string>
<string name="privacy_policy">Datenschutzrichtlinie</string>
<string name="importVoucherVaultMessage">Wähle deinen <i>vouchervault.json</i>-Export aus Voucher Vault zum Importieren aus. \nErstelle ihn, indem du zuerst auf Export in Voucher Vault drückst.</string>
<string name="importVoucherVaultMessage">Wähle deinen <i>vouchervault.json</i>-Export aus Voucher Vault zum Importieren aus.
\nErstellen Sie ihn, indem du zuerst auf Export in Voucher Vault drückst.</string>
<string name="importVoucherVault">Aus Voucher Vault importieren</string>
<string name="importLoyaltyCardKeychainMessage">Wählen du deinen <i>LoyaltyCardKeychain.csv</i>-Export aus Loyalty Card Keychain zum Importieren aus.
\nErstelle ihn über das Menü Import/Export in Loyalty Card Keychain, indem du dort zuerst auf Export drückst.</string>
<string name="importLoyaltyCardKeychain">Aus Loyalty Card Keychain importieren</string>
<string name="importFidmeMessage">Wähle deinen <i>fidme-export-request-xxxxxx.zip</i>-Export aus FidMe zum Importieren aus und wähle anschließend die Barcodetypen manuell aus. \nOder erstelle ihn aus deinem FidMe-Profil, indem du Datenschutz wählst und dann zuerst auf Meine Daten extrahieren drückst.</string>
<string name="importFidmeMessage">Wähle deinen <i>fidme-export-request-xxxxxx.zip</i>-Export aus FidMe zum Importieren aus und wähle anschließend die Strichcodetypen manuell aus.
\nOder erstelle ihn aus deinem FidMe-Profil, indem du Datenschutz wählst und dann zuerst auf Meine Daten extrahieren drückst.</string>
<string name="importFidme">Aus FidMe importieren</string>
<string name="importCatimaMessage">Wähle deinen <i>catima.zip</i>-Export aus Catima zum Importieren aus.
\nErstelle ihn aus dem Import/Export-Menü einer anderen Catima-Anwendung, indem du dort zuerst Export drückst.</string>
<string name="importCatima">Aus Catima importieren</string>
<string name="setBarcodeId">Barcodewert festlegen</string>
<string name="setBarcodeId">Manuell eingeben</string>
<string name="sameAsCardId">Entspricht Kartennummer</string>
<string name="barcodeId">Barcodewert</string>
<string name="errorReadingImage">Konnte das Bild nicht lesen</string>
<string name="noBarcodeFound">Keinen Barcode erkannt</string>
<string name="errorReadingImage">Bildverarbeitung fehlgeschlagen</string>
<string name="noBarcodeFound">Kein Barcode erkannt</string>
<string name="addFromImage">Bild aus der Galerie wählen</string>
<string name="unsupportedBarcodeType">Dieser Barcodetyp kann noch nicht angezeigt werden. Wir hoffen das Format in einer zukünftigen Version zu unterstützen.</string>
<string name="wrongValueForBarcodeType">Der Wert ist für den gewählten Barcodetyp leider nicht gültig</string>
@@ -124,23 +129,24 @@
<string name="updateBarcodeQuestionTitle">Barcodewert aktualisieren?</string>
<string name="takePhoto">Foto aufnehmen</string>
<string name="removeImage">Bild entfernen</string>
<string name="setBackImage">Rückseite einstellen</string>
<string name="setFrontImage">Vorderseite einstellen</string>
<string name="setBackImage">Kartenrückseite</string>
<string name="setFrontImage">Kartenvorderseite</string>
<string name="photos">Fotos</string>
<string name="frontImageDescription">Vorderseite</string>
<string name="backImageDescription">Rückseite</string>
<string name="frontImageDescription">Bild auf der Vorseite</string>
<string name="backImageDescription">Bild auf der Rückseite</string>
<string name="passwordRequired">Bitte gib das Passwort ein</string>
<string name="importStocardMessage">Wähle deinen <i>***.zip</i>-Export aus Stocard zum Importieren aus. \nDu erhälst ihn, indem du eine E-Mail an support@stocardapp.com sendest und um einen Export deiner Daten bittest.</string>
<string name="importStocardMessage">Wähle deinen <i>***.zip</i>-Export aus Stocard zum Importieren aus.
\nSie erhalten ihn, indem du eine E-Mail an support@stocardapp.com sendest und um einen Export deiner Daten bitten.</string>
<string name="importStocard">Von Stocard importieren</string>
<string name="turn_flashlight_off">Blitzlicht ausschalten</string>
<string name="turn_flashlight_on">Blitzlicht einschalten</string>
<string name="turn_flashlight_off">Licht ausschalten</string>
<string name="turn_flashlight_on">Licht einschalten</string>
<string name="failedGeneratingShareURL">URL konnte nicht erstellt werden. Bitte melde das an uns.</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> ausgewählt</item>
<item quantity="other"><xliff:g>%d</xliff:g> ausgewählt</item>
</plurals>
<string name="deleteTitle">Karte löschen</string>
<string name="deleteConfirmation">Diese Karte endgültig löschen?</string>
<string name="deleteConfirmation">Diese Karte wirklich löschen?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Diese <xliff:g>%d</xliff:g> Karte endgültig löschen\?</item>
<item quantity="other">Diese <xliff:g>%d</xliff:g> Karten endgültig löschen\?</item>
@@ -152,6 +158,7 @@
<string name="settings_system_locale">System</string>
<string name="settings_locale">Sprache</string>
<string name="settings_brown_theme">Braun</string>
<string name="settings_grey_theme">Grau</string>
<string name="settings_green_theme">Grün</string>
<string name="settings_sky_blue_theme">Himmelblau</string>
<string name="settings_blue_theme">Blau</string>
@@ -160,19 +167,18 @@
<string name="settings_pink_theme">Rosa</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_theme_color">Designfarbe</string>
<string name="app_contributors">Ermöglicht durch: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="barcodeImageDescriptionWithType">Bild <xliff:g>%s</xliff:g> Barcode</string>
<string name="sort_by">Sortieren nach</string>
<string name="sort_by_expiry">Ablauf</string>
<string name="sort_by_most_recently_used">Zuletzt verwendet</string>
<string name="sort_by_name">Name</string>
<string name="sort">Sortieren</string>
<string name="reverse">…in umgekehrter Reihenfolge</string>
<string name="reverse"> in umgekehrter Reihenfolge</string>
<string name="version_history">Versionshistorie</string>
<string name="credits">Dank an</string>
<string name="help_translate_this_app">Hilf bei der Übersetzung</string>
<string name="help_translate_this_app">Hilfe bei der Übersetzung</string>
<string name="and_data_usage">und Datennutzung</string>
<string name="rate_this_app">Bewerte die App</string>
<string name="rate_this_app">Bewerte die Anwendung</string>
<string name="on_google_play">auf Google Play</string>
<string name="license">Lizenz</string>
<string name="source_repository">Quellcode</string>
@@ -186,10 +192,10 @@
<string name="editGroup">Gruppe wird bearbeitet: <xliff:g>%s</xliff:g></string>
<string name="group_edit">Gruppe bearbeiten</string>
<string name="noGiftCardsGroup">Erstelle einige Karten und ordne sie dann hier der Gruppe zu.</string>
<string name="setIcon">Vorschaubild festlegen</string>
<string name="setIcon">Vorschau setzen</string>
<string name="selectColor">Farbe auswählen</string>
<string name="translate_platform">auf Weblate</string>
<string name="shortcutSelectCard">Karte wählen</string>
<string name="shortcutSelectCard">Wählen Sie eine Karte</string>
<string name="options">Optionen</string>
<string name="showMoreInfo">Infos anzeigen</string>
<string name="starred">als Favorit</string>
@@ -198,14 +204,14 @@
<item quantity="other"><xliff:g>%s</xliff:g> Punkte</item>
</plurals>
<string name="settings_oled_dark">Komplett schwarzer Hintergrund im dunklen Design</string>
<string name="include_if_asking_support">Wenn Du Unterstützung haben möchtest, gib bitte folgende Informationen an:</string>
<string name="include_if_asking_support">Wenn Sie Unterstützung anfordern möchten, geben Sie bitte die folgenden Informationen an:</string>
<string name="settings_follow_system_orientation">System folgen</string>
<string name="settings_landscape_orientation">Querformat</string>
<string name="settings_portrait_orientation">Hochformat</string>
<string name="settings_landscape_orientation">Landschaft</string>
<string name="settings_portrait_orientation">Porträt</string>
<string name="duplicateCard">Duplizieren</string>
<string name="unarchive">Aus dem Archiv wiederherstellen</string>
<string name="settings_card_orientation">Bildschirm-Ausrichtung</string>
<string name="unarchived">Karte aus dem Archiv wiederhergestellt</string>
<string name="unarchive">Archivierung aufheben</string>
<string name="settings_card_orientation">Barcode-Ausrichtung</string>
<string name="unarchived">Karte nicht archiviert</string>
<string name="archive">Archivieren</string>
<string name="archived">Karte archiviert</string>
<string name="settings_lock_on_opening_orientation">Kartenausrichtung nach dem Öffnen beibehalten</string>
@@ -213,82 +219,67 @@
<item quantity="one"><xliff:g>%1$d</xliff:g> Karte (<xliff:g id="archivedCount">%2$d</xliff:g> archiviert)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> Karten (<xliff:g id="archivedCount">%2$d</xliff:g> archiviert)</item>
</plurals>
<string name="failedLaunchingPhotoPicker">Es konnte keine unterstützte Galerie-App gefunden werden</string>
<string name="failedLaunchingPhotoPicker">Es konnte keine unterstützte Galerie-Anwendung gefunden werden</string>
<string name="previousCard">Vorherige</string>
<string name="nextCard">Nächste</string>
<string name="failedToOpenUrl">Bitte installiere zuerst einen Webbrowser</string>
<string name="failedToOpenUrl">Installieren Sie zunächst einen Webbrowser</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Archiv ansehen (<xliff:g>%1$d</xliff:g> Karte)</item>
<item quantity="other">Archiv ansehen (<xliff:g>%1$d</xliff:g> Karten)</item>
</plurals>
<string name="welcome">Willkommen bei Catima</string>
<string name="barcodeLongPressMessage">In der Galerie können nur Bilder geöffnet werden</string>
<string name="failedToRetrieveImageFile">Bilddatei konnte nicht abgerufen werden</string>
<string name="updateBalanceTitle">Wie viel hast du ausgegeben oder erhalten?</string>
<string name="updateBalanceTitle">Wie viel haben Sie ausgegeben\?</string>
<string name="cameraPermissionDeniedTitle">Kein Zugriff auf die Kamera möglich</string>
<string name="noCameraPermissionDirectToSystemSetting">Um Barcodes zu scannen, benötigt Catima Zugriff auf deine Kamera. Tippe hier, um deine Berechtigungseinstellungen zu ändern.</string>
<string name="noCameraPermissionDirectToSystemSetting">Um Strichcodes zu scannen, benötigt Catima Zugriff auf Ihre Kamera. Tippen Sie hier, um Ihre Berechtigungseinstellungen zu ändern.</string>
<string name="updateBalanceHint">Betrag eingeben</string>
<string name="importCards">Karten importieren</string>
<string name="currentBalanceSentence">Aktuelles Guthaben: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">Neues Guthaben: <xliff:g>%s</xliff:g></string>
<string name="updateBalance">Guthaben aktualisieren</string>
<string name="storageReadPermissionRequired">Berechtigung zum Lesen des Speichers für diese Aktion erforderlich…</string>
<string name="cameraPermissionRequired">Für diese Aktion wird die Erlaubnis zum Zugriff auf die Kamera benötigt…</string>
<string name="storageReadPermissionRequired">Berechtigung zum Lesen des Speichers für diese Aktion erforderlich </string>
<string name="cameraPermissionRequired">Für diese Aktion wird die Erlaubnis zum Zugriff auf die Kamera benötigt </string>
<string name="validFromDate">Gültig ab</string>
<string name="validFromSentence">Gültig ab: <xliff:g>%s</xliff:g></string>
<string name="chooseValidFromDate">Gültig-ab-Datum wählen</string>
<string name="anyDate">Beliebiges Datum</string>
<string name="icon_header_click_text">Zum Bearbeiten des Vorschaubildes lang drücken</string>
<string name="switchToBarcode">Zum Barcode wechseln</string>
<string name="openFrontImageInGalleryApp">Vorderseite in Galerie öffnen</string>
<string name="openBackImageInGalleryApp">Rückseite in Galerie öffnen</string>
<string name="icon_header_click_text">Langes Drücken zum Bearbeiten der Vorschau</string>
<string name="switchToBarcode">Umschalten auf Barcode</string>
<string name="openFrontImageInGalleryApp">Vorderes Bild in der Galerie öffnen</string>
<string name="openBackImageInGalleryApp">Hinteres Bild in der Galerie öffnen</string>
<string name="height">Höhe:</string>
<string name="switchToFrontImage">Zur Vorderseite wechseln</string>
<string name="switchToBackImage">Zur Rückseite wechseln</string>
<string name="switchToFrontImage">Zum vorderen Bild wechseln</string>
<string name="switchToBackImage">Zum hinteren Bild wechseln</string>
<string name="setBarcodeHeight">Barcode-Höhe einstellen</string>
<string name="donate">Spenden</string>
<string name="show_note">Notiz anzeigen</string>
<string name="show_balance">Betrag anzeigen</string>
<string name="show_validity">Gültigkeitsdauer anzeigen</string>
<string name="show_name_below_image_thumbnail">Namen unter Vorschaubild anzeigen</string>
<string name="settings_allow_content_provider_read_title">Anderen Apps den Zugriff auf meine Daten gestatten</string>
<string name="show_name_below_image_thumbnail">Namen unter Bildvorschau anzeigen</string>
<string name="settings_allow_content_provider_read_title">Anderen Anwendungen den Zugriff auf meine Daten gestatten</string>
<string name="permissionReadCardsLabel">Catima-Karten lesen</string>
<string name="permissionReadCardsDescription">Lesen deiner Catima Karten mit allen Details, einschließlich Notizen und Bildern</string>
<string name="settings_allow_content_provider_read_summary">Apps müssen weiterhin eine Genehmigung beantragen, um Zugriff zu erhalten</string>
<string name="permissionReadCardsDescription">lesen deiner Catima Karten mit allen Details, einschließlich Notizen und Bildern</string>
<string name="settings_allow_content_provider_read_summary">Anwendungen müssen weiterhin eine Genehmigung beantragen, um Zugriff zu erhalten</string>
<string name="settings_display_barcode_max_brightness_summary">Erforderlich für das Funktionieren einiger Scanner</string>
<string name="settings_keep_screen_on_summary">Deaktiviert die Bildschirmzeitüberschreitung beim Anzeigen einer Karte</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Deaktiviert die Bildschirmsperre während der Anzeige einer Karte</string>
<string name="settings_oled_dark_summary">Reduziert den Batterieverbrauch bei OLED-Displays</string>
<string name="settings_category_title_cards">Kartenansicht</string>
<string name="settings_category_title_cards">Karten</string>
<string name="settings_category_title_privacy">Datenschutz</string>
<string name="settings_category_title_general">Allgemein</string>
<string name="view_online">Online anzeigen</string>
<string name="view_online">Zeige online</string>
<string name="action_display_options">Anzeigeoptionen</string>
<string name="show_archived_cards">Archivierte Karten anzeigen</string>
<string name="show_archived_cards">Zeige archivierte Karten</string>
<string name="app_copyright_short">Copyright © Sylvia van Os und Mitwirkende</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os und Mitwirkende</string>
<string name="card_id_must_not_be_empty">Kartennummer darf nicht leer sein</string>
<string name="balanceParsingFailed">Ungültiges Guthaben</string>
<string name="add_a_card_in_a_different_way">Karte anders hinzufügen</string>
<string name="action_more_options">Mehr Optionen</string>
<string name="enter_card_id">Gib die Kartennummer oder den Text auf deiner Karte ein</string>
<string name="addWithoutBarcode">Eine Karte ohne Barcode hinzufügen</string>
<string name="enter_card_id">Gib die Codenummer oder Ziffernfolge deiner Karte an</string>
<string name="addWithoutBarcode">Eine Karde ohne Code hinzufügen</string>
<string name="field_must_not_be_empty">Feld darf nicht leer sein</string>
<string name="manually_enter_barcode_instructions">Trage die Kartenummer oder Text deiner Karte ein und drücke auf den Barcode, der wie der auf deiner Karte aussieht.</string>
<string name="manually_enter_barcode_instructions">Trage die ID Nummer oder Text deiner Karte ein und drücke auf den Barcode, der wie auf deiner Karte aussieht.</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Immer drehen (ignoriert Systemeinstellungen)</string>
<string name="continue_">Fortfahren</string>
<string name="add_manually_warning_title">Scannen empfohlen</string>
<string name="add_manually_warning_message">In einigen Geschäften weicht der Wert des Barcodes von dem auf der Karte angegebenen Wert ab. Aus diesem Grund funktioniert die manuelle Eingabe des Barcodes in einigen Fällen nicht. Es wird dringend empfohlen, den Barcode mit einer Kamera zu scannen. Möchtest du dennoch fortfahren?</string>
<string name="spend">Zahlen</string>
<string name="receive">Erhalten</string>
<string name="amountParsingFailed">Ungültiger Betrag</string>
<string name="addFromPdfFile">PDF-Datei auswählen</string>
<string name="errorReadingFile">Datei konnte nicht gelesen werden</string>
<string name="failedLaunchingFileManager">Konnte keinen unterstützten Dateimanager finden</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Welchen der gefundenen Barcodes möchtest du verwenden?</string>
<string name="pageWithNumber">Seite <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Dein Gerät scheint nicht über eine Kamera zu verfügen. Falls doch, versuche, das Gerät neu zu starten. Andernfalls verwende die Schaltfläche Weitere Optionen unten, um einen Barcode auf andere Weise hinzuzufügen.</string>
<string name="exportCancelled">Export abgebrochen</string>
<string name="importCancelled">Import abgebrochen</string>
<string name="useFrontImage">Vorderseite verwenden</string>
<string name="useBackImage">Rückseite verwenden</string>
<string name="settings_use_volume_keys_navigation">Karten mit Lautstärketasten wechseln</string>
<string name="settings_use_volume_keys_navigation_summary">Wähle mit den Lautstärketasten, welche Karte angezeigt werden soll</string>
</resources>

View File

@@ -14,13 +14,13 @@
<string name="sendLabel">Αποστολή…</string>
<string name="editCardTitle">Επεξεργασία Κάρτας</string>
<string name="addCardTitle">Προσθήκη Κάρτας</string>
<string name="scanCardBarcode">Σαρώστε τον γραμμωτό κώδικα</string>
<string name="scanCardBarcode">Σαρώστε τον γραμμοκώδικα (bardcode)</string>
<string name="cardShortcut">Συντόμευση Κάρτας</string>
<string name="noCardsMessage">Προσθέστε μία κάρτα πρώτα</string>
<string name="noCardExistsError">Δεν ήταν δυνατό να εντοπιστεί η κάρτα</string>
<string name="importExport">Εισαγωγή/Εξαγωγή</string>
<string name="exportName">Εξαγωγή</string>
<string name="importExportHelp">Τα αντίγραφα ασφαλείας σας επιτρέπουν να τα εισάγετε σε άλλη συσκευή.</string>
<string name="importExportHelp">Τα αντίγραφα ασφαλείας, σας επιτρέπουν να τα εισάγετε σε άλλη συσκευή.</string>
<string name="importSuccessfulTitle">Εισήχθησαν</string>
<string name="importFailedTitle">Εισαγωγή ανεπιτυχής</string>
<string name="importFailed">Δεν ήταν δυνατή η εισαγωγή</string>
@@ -39,7 +39,7 @@
<string name="app_license">Άδεια χρήσης υπό GPLv3+</string>
<string name="about_title_fmt">Σχετικά με <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Έκδοση: <xliff:g id="version">%s</xliff:g></string>
<string name="selectBarcodeTitle">Επιλέξτε γραμμωτό κώδικα</string>
<string name="selectBarcodeTitle">Επιλέξτε Barcode</string>
<string name="thumbnailDescription">Μικρογραφία</string>
<string name="settings">Ρυθμίσεις</string>
<string name="settings_dark_theme">Σκοτεινό</string>
@@ -54,7 +54,7 @@
<item quantity="other"><xliff:g>%d</xliff:g> επιλέγχθηκαν</item>
</plurals>
<string name="noGiftCardsGroup">Δημιούργησε κάρτες και βάλτες σε αυτή την ομάδα.</string>
<string name="addManually">Εισαγάγετε τον γραμμωτό κώδικα με μη αυτόματο τρόπο</string>
<string name="addManually">Χειροκίνητη εισαγωγή κωδικού</string>
<string name="never">Ποτέ</string>
<string name="share">Κοινοποίηση</string>
<plurals name="balancePoints">
@@ -64,14 +64,14 @@
<string name="exportOptionExplanation">Τα δεδομένα θα μεταφερθούν σε τοποθεσία της επιλογής σας.</string>
<string name="settings_theme">Θέμα</string>
<string name="groupsList">Ομάδες: <xliff:g>%s</xliff:g></string>
<string name="barcodeId">Τιμή γραμμωτού κώδικα</string>
<string name="barcodeId">Τιμή γραμμοκώδικα</string>
<string name="sort">Ταξινόμηση</string>
<string name="deleteConfirmationGroup">Διαγραφή ομάδας;</string>
<string name="moveDown">Προχώρα κάτω</string>
<string name="accept">Αποδοχή</string>
<string name="yes">Ναι</string>
<string name="no">Όχι</string>
<string name="addFromImage">Επιλέξτε μια εικόνα από τη συλλογή</string>
<string name="addFromImage">Επιλογή εικόνας από την συλλογή</string>
<string name="expiryStateSentence">Λήγει: <xliff:g>%s</xliff:g></string>
<string name="expiryDate">Ημερομηνία λήξης</string>
<string name="settings_keep_screen_on">Κράτα την οθόνη ανοιχτή</string>
@@ -91,18 +91,18 @@
<string name="importLoyaltyCardKeychainMessage">Επιλέξτε την <i>LoyaltyCardKeychain.csv</i> εξαγωγή από το Loyalty Card Keychain για εισαγωγή.
\nΔημιουργήστε το από το μενού Εισαγωγής/Εξαγωγής στο Loyalty Card Keychain επιλέγοντας Εξαγωγή.</string>
<string name="importFidme">Εισαγωγή από FidMe</string>
<string name="importFidmeMessage">Επιλέξτε την <i>fidme-export-request-xxxxxx.zip</i> εξαγωγή από το FidMe για εισαγωγή και επιλέξτε χειροκίνητα τους τύπους γραμμωτού κώδικα μετέπειτα.
\nΔημιουργήστε το από το FidMe προφίλ επιλέγοντας Προστασία Δεδομένων και πατώντας Εξαγωγή δεδομένων πρώτα.</string>
<string name="setBarcodeId">Επιλέξτε τιμή γραμμωτού κώδικα</string>
<string name="wrongValueForBarcodeType">Η τιμή δεν είναι έγκυρη για τον επιλεγμένο γραμμωτό κώδικα</string>
<string name="importFidmeMessage">Επιλέξτε την <i>fidme-export-request-xxxxxx.zip</i> εξαγωγή από το FidMe για εισαγωγή και επιλέξτε χειροκίνητα τους τύπους γραμμοκώδικα μετέπειτα.
\nΔημιουργήστε το από το FidMe προφίλ επιλέγοντας Προστασία Δεδομένων και διαλέγοντας εξαγωγή δεδομένων.</string>
<string name="setBarcodeId">Επιλέξτε τιμή γραμμοκώδικα</string>
<string name="wrongValueForBarcodeType">Η τιμή δεν είναι έγκυρη για αυτού του τύπου γραμμοκώδικα</string>
<string name="setBackImage">Επιλογή οπίσθιας εικόνας</string>
<string name="removeImage">Αφαίρεση εικόνας</string>
<string name="takePhoto">Τραβήξτε μια φωτογραφία</string>
<string name="updateBarcodeQuestionText">Αλλάξατε τον κωδικό. Θέλετε να ενημερώσετε και τον γραμμωτό κώδικα στην ίδια τιμή;</string>
<string name="updateBarcodeQuestionText">Αλλάξατε τον κωδικό. Θέλετε να ενημερώσετε και τον γραμμοκώδικα στην ίδια τιμή;</string>
<string name="options">Επιλογές</string>
<string name="noGroupCards">Αυτή η ομάδα είναι άδεια</string>
<string name="settings_display_barcode_max_brightness">Επιπλέον φωτισμός γραμμωτού κώδικα</string>
<string name="group_name_is_empty">Το όνομα της ομάδας δεν πρέπει να είναι κενό</string>
<string name="settings_display_barcode_max_brightness">Επιπλέον φωτισμός γραμμοκώδικα</string>
<string name="group_name_is_empty">Το όνομα ομάδας δεν γίνεται να είναι κενό</string>
<string name="group_edit">Επεξεργασία ομάδας</string>
<string name="star">Προσθήκη στα αγαπημένα</string>
<string name="unstar">Αφαίρεση από τα αγαπημένα</string>
@@ -114,7 +114,10 @@
<string name="currency">Νόμισμα</string>
<string name="privacy_policy">Πολιτική απορρήτου</string>
<string name="chooseImportType">Εισαγωγή δεδομένων από</string>
<string name="app_loyalty_card_keychain">Lοyalty Card Keychain</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="privacy_policy_popup_text">Σημείωμα πολιτικής απορρήτου ( υποχρεωτικό σε κάποια \"μαγαζιά\" εφαρμογών)
\n
\nΜΗΔΕΝΙΚΆ ΔΕΔΟΜΈΝΑ ΣΥΛΛΈΓΟΝΤΑΙ, ο οποιοσδήποτε μπορεί να το επιβεβαιώσει μιας και η εφαρμογή είναι ελεύθερο λογισμικό.</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> κάρτα ( <xliff:g id="archivedCount">%2$d</xliff:g> αρχειοθετήθηκε)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> κάρτες ( <xliff:g id="archivedCount">%2$d</xliff:g> αρχειοθετήθηκαν)</item>
@@ -128,26 +131,27 @@
<string name="setFrontImage">Επιλογή μπροστινής εικόνας</string>
<string name="importVoucherVaultMessage">Επιλέξτε την <i>vouchervault.json</i> εξαγωγή από το Voucher Vault για εισαγωγή.
\nΔημιουργήστε το επιλέγοντας Εξαγωγή στο Voucher Vault.</string>
<string name="unsupportedBarcodeType">Ο τύπος γραμμωτού κώδικα δεν μπορεί να εμφανιστεί ακόμα. Μπορεί να υποστηρίζεται σε μια μελλοντική έκδοση της εφαρμογής.</string>
<string name="unsupportedBarcodeType">Ο τύπος γραμμοκώδικα δεν γίνεται να εμφανιστεί ακόμα. Μπορεί να υποστηρίζεται σε μια μελλοντική έκδοση της εφαρμογής.</string>
<string name="frontImageDescription">Μπροστινή εικόνα</string>
<string name="photos">Φωτογραφίες</string>
<string name="backImageDescription">Οπίσθια εικόνα</string>
<string name="updateBarcodeQuestionTitle">Ενημέρωση τιμής γραμμωτού κώδικα;</string>
<string name="updateBarcodeQuestionTitle">Ενημέρωση τιμής γραμμοκώδικα;</string>
<string name="passwordRequired">Παρακαλώ εισάγετε τον κωδικό</string>
<string name="sort_by_most_recently_used">Χρησιμοποιήθηκαν πρόσφατα</string>
<string name="shortcutSelectCard">Επιλέξτε μία κάρτα</string>
<string name="barcodeImageDescriptionWithType">Εικόνα <xliff:g>%s</xliff:g> γραμμωτού κώδικα</string>
<string name="barcodeImageDescriptionWithType">Εικόνα <xliff:g>%s</xliff:g> γραμμοκώδικα</string>
<string name="app_libraries">Ελεύθερες βιβλιοθήκες τρίτων: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="license">Άδεια</string>
<string name="include_if_asking_support">Αν θέλετε να ζητήσετε υποστήριξη, συμπεριλάβετε τις ακόλουθες πληροφορίες:</string>
<string name="importSuccessful">Δεδομένα εισήχθησαν</string>
<string name="moveUp">Προχώρα πάνω</string>
<string name="barcodeType">Τύπος γραμμωτού κώδικα</string>
<string name="barcodeType">Τύπος γραμμοκώδικα</string>
<string name="app_resources">Ελεύθερες πηγές τρίτων: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="selectColor">Επιλογή χρώματος</string>
<string name="setIcon">Ορισμός εικονιδίου</string>
<string name="settings_sky_blue_theme">Γαλάζιο</string>
<string name="settings_green_theme">Πράσινο</string>
<string name="settings_grey_theme">Γκρι</string>
<string name="settings_brown_theme">Καφέ</string>
<string name="sort_by_expiry">Λήξη</string>
<plurals name="groupCardCount">
@@ -158,7 +162,7 @@
<string name="exportSuccessful">Δεδομένα εξήχθησαν</string>
<string name="settings_disable_lockscreen_while_viewing_card">Αποτροπή κλειδώματος οθόνης</string>
<string name="failedLaunchingPhotoPicker">Δεν βρέθηκε υποστηριζόμενη εφαρμογή συλλογής</string>
<string name="noBarcode">Χωρίς γραμμωτό κώδικα</string>
<string name="noBarcode">Χωρίς barcode</string>
<string name="starImage">Αγαπημένο αστέρι</string>
<string name="balanceSentence">Υπόλοιπο: <xliff:g>%s</xliff:g></string>
<string name="failedParsingImportUriError">Δεν ήταν δυνατή η ανάλυση του εισαγόμενου URL</string>
@@ -169,7 +173,7 @@
<string name="app_copyright_old">Βασισμένο στο Loyalty Card Keychain
\nπνευματικά δικαιώματα © 2016-2020 Branden Archer</string>
<string name="settings_follow_system_orientation">Ακολούθηση συστήματος</string>
<string name="settings_card_orientation">Προσανατολισμός γραμμωτού κώδικα</string>
<string name="settings_card_orientation">Προσανατολισμός γραμμοκώδικα</string>
<string name="settings_portrait_orientation">Πορτραίτο</string>
<string name="settings_landscape_orientation">Οριζόντια</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Πνευματικά δικαιώματα © 2019-<xliff:g>%d</xliff:g> Sylvia van Os</string>
@@ -185,15 +189,15 @@
<string name="leaveWithoutSaveConfirmation">Έξοδος χωρίς αποθήκευση;</string>
<string name="expiryStateSentenceExpired">Έληξε: <xliff:g>%s</xliff:g></string>
<string name="card">Κάρτα</string>
<string name="editBarcode">Επεξεργασία γραμμωτού κώδικα</string>
<string name="editBarcode">Επεξεργασία γραμμοκώδικα</string>
<string name="chooseExpiryDate">Επιλέξτε ημερομηνία λήξης</string>
<string name="moveBarcodeToTopOfScreen">Μετακίνηση του γραμμωτού κώδικα στο πάνω μέρος της οθόνης</string>
<string name="noBarcodeFound">Δεν βρέθηκε γραμμωτός κώδικα</string>
<string name="moveBarcodeToTopOfScreen">Μετακίνηση του γραμμοκώδικα στο πάνω μέρος της οθόνης</string>
<string name="noBarcodeFound">Δεν βρέθηκε γραμμοκώδικας</string>
<string name="balance">Υπόλοιπο</string>
<string name="importCatima">Εισαγωγή από Catima</string>
<string name="importStocard">Εισαγωγή από Stocard</string>
<string name="importVoucherVault">Εισαγωγή από Voucher Vault</string>
<string name="sameAsCardId">Όπως ο κωδικός</string>
<string name="sameAsCardId">Ίδιος κωδικός</string>
<string name="exportPassword">Προσθέστε έναν κωδικό για προστασία της εξαγωγής (προαιρετικά)</string>
<string name="exportPasswordHint">Εισαγωγή κωδικού</string>
<string name="failedGeneratingShareURL">Δεν ήταν δυνατή η δημιουργία κοινοποιούμενου URL. Παρακαλώ αναφέρετε το.</string>
@@ -203,12 +207,11 @@
<string name="settings_oled_dark">Απόλυτο μαύρο φόντο για το μαύρο θέμα</string>
<string name="settings_system_locale">Σύστημα</string>
<string name="settings_theme_color">Χρώμα θέματος</string>
<string name="settings_catima_theme">Κάτιμα</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">Ροζ</string>
<string name="settings_magenta_theme">Φούξια</string>
<string name="settings_violet_theme">Βιολετί</string>
<string name="settings_blue_theme">Μπλε</string>
<string name="app_contributors">Δημιουργήθηκε από: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="showMoreInfo">Εμφάνιση πληροφοριών</string>
<string name="sort_by_name">Όνομα</string>
<string name="and_data_usage">και δεδομένα χρήσης</string>
@@ -218,78 +221,26 @@
<string name="archived">Η κάρτα αρχειοθετήθηκε</string>
<string name="unarchived">Η κάρτα αφαιρέθηκε από το αρχείο</string>
<string name="unarchive">Αφαίρεση από το αρχείο</string>
<string name="updateBalanceTitle">Πόσα ξοδέψατε ή λάβατε;</string>
<string name="updateBalanceTitle">Πόσα ξοδέψατε;</string>
<string name="cameraPermissionDeniedTitle">Αδύνατη η πρόσβαση στην κάμερα</string>
<string name="failedToRetrieveImageFile">Αποτυχία ανάκτησης αρχείου εικόνας</string>
<string name="previousCard">Προηγούμενη</string>
<string name="nextCard">Επόμενη</string>
<string name="updateBalance">Ενημέρωση υπολοίπου</string>
<string name="barcodeLongPressMessage">Μόνο εικόνες μπορούν να ανοιχτούν στην εφαρμογή φωτογραφιών</string>
<string name="noCameraPermissionDirectToSystemSetting">Για να σκανάρετε γραμμωτούς κώδικες, θα χρειαστεί πρόσβαση στην κάμερα από το Catima. Πατήστε εδώ για να δώσετε πρόσβαση.</string>
<string name="noCameraPermissionDirectToSystemSetting">Για να σκανάρετε γραμμοκώδικες, θα χρειαστεί πρόσβαση στην κάμερα από το Catima. Πατήστε εδώ για να δώσετε πρόσβαση.</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Προβολή αρχείου (<xliff:g>%1$d</xliff:g> κάρτας)</item>
<item quantity="other">Προβολή αρχείου (<xliff:g>%1$d</xliff:g> καρτών)</item>
</plurals>
<string name="importCards">Εισαγωγή καρτών</string>
<string name="updateBalanceHint">Εισάγετε ποσό</string>
<string name="currentBalanceSentence">Τωρινό υπόλοιπο <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">Νέο υπόλοιπο: <xliff:g>%s</xliff:g></string>
<string name="failedToOpenUrl">Εγκαταστήστε έναν περιηγητή πρώτα</string>
<string name="welcome">Καλώς ήρθατε στο Catima</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Απενεργοποιεί το κλείδωμα οθόνης κατά την προβολή μιας κάρτας</string>
<string name="settings_display_barcode_max_brightness_summary">Απαραίτητο για να δουλέψει σε κάποιους σαρωτές</string>
<string name="cameraPermissionRequired">Δικαίωμα πρόσβασης στην κάμερα απαραίτητο γι\' αυτή την ενέργεια…</string>
<string name="settings_allow_content_provider_read_title">Να επιτρέπεται σε άλλες εφαρμογές να έχουν πρόσβαση στα δεδομένα μου</string>
<string name="app_copyright_short">Πνευματικά δικαιώματα © Sylvia van Os και συνεργάτες</string>
<string name="height">Ύψος:</string>
<string name="switchToFrontImage">Μετάβαση στην μπροστινή εικόνα</string>
<string name="switchToBackImage">Μετάβαση στην οπίσθια εικόνα</string>
<string name="switchToBarcode">Μετάβαση σε γραμμωτό κώδικα</string>
<string name="validFromSentence">Ισχύει από: <xliff:g>%s</xliff:g></string>
<string name="permissionReadCardsLabel">Διαβάστε τις κάρτες Catima</string>
<string name="openBackImageInGalleryApp">Ανοίξτε την οπίσθια εικόνα στην εφαρμογή γκαλερί</string>
<string name="permissionReadCardsDescription">Διάβασε τις Κάρτες σου Catima και όλες τους τις λεπτομέρειες, συμπεριλαμβανομένων των σημειώσεων και των εικόνων</string>
<string name="donate">Δωρεά</string>
<string name="icon_header_click_text">Πατήστε παρατεταμένα για επεξεργασία του εικονιδίου</string>
<string name="openFrontImageInGalleryApp">Ανοίξτε την μπροστινή εικόνα στην εφαρμογή γκαλερί</string>
<string name="storageReadPermissionRequired">Δικαίωμα ανάγνωσης του χώρου αποθήκευσης απαραίτητο για αυτήν την ενέργεια…</string>
<string name="settings_follow_sensor_orientation">Πάντα σε περιστροφή (αγνοεί τις ρυθμίσεις του συστήματος)</string>
<string name="validFromDate">Ισχύει από</string>
<string name="anyDate">Οποιαδήποτε ημερομηνία</string>
<string name="chooseValidFromDate">Επιλέξτε έγκυρη ημερομηνία από</string>
<string name="setBarcodeHeight">Ρυθμίστε το ύψος του γραμμωτού κώδικα</string>
<string name="show_name_below_image_thumbnail">Εμφάνιση ονόματος κάτω από το εικονίδιο</string>
<string name="app_name">Catima</string>
<string name="balanceParsingFailed">Μη έγκυρο υπόλοιπο</string>
<string name="continue_">Συνέχεια</string>
<string name="settings_category_title_privacy">Απόρρητο</string>
<string name="addFromPdfFile">Επιλογή αρχείου PDF</string>
<string name="add_manually_warning_message">Για ορισμένα καταστήματα, ο γραμμωτός κώδικας διαφέρει από τον αριθμό που αναγράφεται πάνω στην κάρτα. Εξαιτίας αυτού, η εισαγωγή γραμμωτού κώδικα χειροκίνητα ενδέχεται να μην λειτουργεί πάντα. Προτείνεται να σκανάρετε τον γραμμωτό κώδικα με χρήση της κάμερας. Επιθυμείτε να συνεχίσετε ;</string>
<string name="amountParsingFailed">Μη έγκυρο ποσό</string>
<string name="show_balance">Προβολή υπολοίπου</string>
<string name="action_display_options">Επιλογές εμφάνισης</string>
<string name="settings_category_title_cards">Κάρτες</string>
<string name="settings_category_title_general">Γενικά</string>
<string name="show_archived_cards">Προβολή αρχειοθετημένων καρτών</string>
<string name="addWithoutBarcode">Προσθήκη κάρτας χωρίς γραμμωτό κώδικα</string>
<string name="view_online">Προβολή διαδικτυακά</string>
<string name="errorReadingFile">Δεν ήταν δυνατή η ανάγνωση του αρχείου</string>
<string name="failedLaunchingFileManager">Δεν ήταν δυνατή η εύρεση υποστηριζόμενου διαχειριστή αρχείων</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Ποιους από τους γραμμωτούς κώδικες που βρέθηκαν θέλετε να χρησιμοποιήσετε;</string>
<string name="pageWithNumber">Σελίδα <xliff:g>%d</xliff:g></string>
<string name="spend">Δαπάνησε</string>
<string name="receive">Λήψη</string>
<string name="settings_keep_screen_on_summary">Απενεργοποιεί το χρονικό όριο της οθόνης κατά την προβολή μιας κάρτας</string>
<string name="settings_oled_dark_summary">Μειώνει τη χρήση της μπαταρίας στις οθόνες OLED</string>
<string name="show_note">Εμφάνιση σημείωσης</string>
<string name="action_more_options">Περισσότερες επιλογές</string>
<string name="enter_card_id">Εισαγάγετε τον κωδικό αριθμό ή το κείμενο στην κάρτα σας</string>
<string name="show_validity">Εμφάνιση εγκυρότητας</string>
<string name="add_a_card_in_a_different_way">Προσθέστε μια κάρτα με διαφορετικό τρόπο</string>
<string name="card_id_must_not_be_empty">Ο κωδικός αριθμός της κάρτας δεν πρέπει να είναι κενός</string>
<string name="settings_allow_content_provider_read_summary">Οι εφαρμογές θα πρέπει ακόμα να ζητήσουν άδεια για να τους δοθεί πρόσβαση</string>
<string name="field_must_not_be_empty">Το πεδίο δεν πρέπει να είναι κενό</string>
<string name="manually_enter_barcode_instructions">Εισαγάγετε τον κωδικό αριθμό ή το κείμενο στην κάρτα σας και πατήστε τον γραμμωτό κώδικα που μοιάζει με αυτόν της κάρτας σας.</string>
<string name="add_manually_warning_title">Συνιστάται η σάρωση</string>
<string name="noCameraFoundGuideText">Η συσκευή σας δεν φαίνεται να διαθέτει κάμερα. Αν έχει, δοκιμάστε να κάνετε επανεκκίνηση της συσκευής. Διαφορετικά, χρησιμοποιήστε το κουμπί Περισσότερες επιλογές παρακάτω για να προσθέσετε έναν γραμμωτό κώδικα με άλλο τρόπο.</string>
<string name="importCancelled">Η εισαγωγή ακυρώθηκε</string>
<string name="exportCancelled">Η εξαγωγή ακυρώθηκε</string>
<string name="useFrontImage">Χρήση μπροστινής εικόνας</string>
<string name="useBackImage">Χρήση οπίσθιας εικόνας</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Απενεργοποιεί το κλείδωμα οθόνης ενόσω βλέπετε μια κάρτα</string>
<string name="settings_display_barcode_max_brightness_summary">Απαραίτητο για να δουλέψει σε κάποια σκάνερ</string>
<string name="cameraPermissionRequired">Χρειάζεται άδεια για πρόσβαση στην κάμερα γι\' αυτή την ενέργεια…</string>
<string name="settings_allow_content_provider_read_title">Επιτρέπει σε άλλες εφαρμογές να έχουν πρόσβαση στα δεδομένα μου</string>
</resources>

View File

@@ -1,24 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="delete">Forigi</string>
<string name="noBarcode">Sen strikodo</string>
<string name="barcodeType">Tipo de strikodo</string>
<string name="noBarcode">Sen strekokodo</string>
<string name="barcodeType">Tipo de strekokodo</string>
<string name="cardId">Identigilo de karto</string>
<string name="settings">Agordoj</string>
<string name="selectBarcodeTitle">Elekti strikodon</string>
<string name="selectBarcodeTitle">Elekti strekokodon</string>
<string name="debug_version_fmt">Versio: <xliff:g id="version">%s</xliff:g></string>
<string name="about_title_fmt">Pri <xliff:g id="app_name">%s</xliff:g></string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Kopirajto © 2019<xliff:g>%d</xliff:g> Sylvia van Os kaj kontribuantoj</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Kopirajto © 2019<xliff:g>%d</xliff:g> Sylvia van Os.</string>
<string name="importOptionFilesystemButton">El dosiersistemo</string>
<string name="importOptionFilesystemTitle">Enporti el dosiersistemo</string>
<string name="exportFailedTitle">Eksportado malsukcesis</string>
<string name="exportSuccessfulTitle">Eksportado sukcesis</string>
<string name="importFailedTitle">Importado malsukcesis</string>
<string name="importSuccessfulTitle">Importado sukcesis</string>
<string name="exporting">Eksportante…</string>
<string name="importing">Importante…</string>
<string name="exportFailedTitle">Elportado malsukcesis</string>
<string name="exportSuccessfulTitle">Elportado sukcesis</string>
<string name="importFailedTitle">Enportado malsukcesis</string>
<string name="importSuccessfulTitle">Enportado sukcesis</string>
<string name="exporting">Elportante…</string>
<string name="importing">Enportante…</string>
<string name="exportName">Elporti</string>
<string name="importExport">Importi/eksporti</string>
<string name="importExport">Enporti/elporti</string>
<string name="addCardTitle">Aldoni karton</string>
<string name="editCardTitle">Redakti karton</string>
<string name="sendLabel">Sendi…</string>
@@ -28,7 +28,7 @@
<string name="photos">Fotoj</string>
<string name="points">Poentoj</string>
<string name="currency">Valuto</string>
<string name="editBarcode">Redakti strikodon</string>
<string name="editBarcode">Redakti strekokodon</string>
<string name="card">Karto</string>
<string name="never">Neniam</string>
<string name="groupsList">Grupoj: <xliff:g>%s</xliff:g></string>
@@ -50,246 +50,37 @@
<string name="deleteConfirmation">Ĉu forigi ĉi tiun karton\?</string>
<string name="deleteTitle">Forigi karton</string>
<string name="settings_display_barcode_max_brightness">Heligi barcode vido</string>
<string name="starImage">Stelmarko</string>
<string name="thumbnailDescription">Bildeto</string>
<string name="starImage">Preferata stelo</string>
<string name="thumbnailDescription">Bildeto por karto</string>
<string name="app_copyright_old">Bazita sur Lojaleco Karto Keychain
\nkopirajto © 2016-2020 Branden Archer</string>
<string name="importOptionApplicationButton">Uzi alian apon</string>
<string name="importOptionApplicationExplanation">Uzi ajnan apon aŭ vian preferatan dosiermastrumilon por malfermi dosieron.</string>
\nkopirajto © 2016-2020 Branden Archer.</string>
<string name="importOptionApplicationButton">Uzi alian app</string>
<string name="importOptionApplicationExplanation">Uzi ajna app aŭ via preferata dosiera # mana\? ero por malfermi dosieron.</string>
<string name="importOptionApplicationTitle">Uzi alian app</string>
<string name="importOptionFilesystemExplanation">Elektu specifa dosiero de la dosiersistemo.</string>
<string name="exportOptionExplanation">La datumoj estos skribita al loko de via elekto.</string>
<string name="exportFailed">Ne povis fari eksportadon</string>
<string name="importFailed">Ne povis fari importadon</string>
<string name="importExportHelp">Fari savkopion de viaj datumoj permesas movi ilin al alia aparato.</string>
<string name="failedParsingImportUriError">Ne eblis analizi la URI de la importado</string>
<string name="noCardExistsError">Ne eblis trovi tiun karton</string>
<string name="noCardsMessage">Aldonu karton unue</string>
<string name="exportFailed">Ne povis eksporti kartoj</string>
<string name="importFailed">Ne povis importi kartoj</string>
<string name="importExportHelp">Subtenanta supre vian kartoj permesas vin movi ilin al alia aparato.</string>
<string name="failedParsingImportUriError">Ne eblis analizi la importado URI</string>
<string name="noCardExistsError">Ne eblis trovi karto</string>
<string name="noCardsMessage">Aldoni karto unua</string>
<string name="cardShortcut">Karto Mallongirejo</string>
<string name="scanCardBarcode">Skani strikodon</string>
<string name="scanCardBarcode">Scintigrafio Barcode Card</string>
<string name="share">Interŝanĝado</string>
<string name="star">Aldoni al miaj markitaj</string>
<string name="star">Aldoni al miaj plej ŝatataj</string>
<string name="settings_keep_screen_on">Teni sur ekrano</string>
<string name="importSuccessful">Datumoj importitaj</string>
<string name="enter_group_name">Entajpu nomo de la grupo</string>
<string name="noGroups">Klaki la + plus butonon por aldoni grupojn por enkategoriigo.</string>
<string name="importSuccessful">Karto datumo importitaj</string>
<string name="enter_group_name">Eniri nomo de la grupo</string>
<string name="noGroups">Klaki la + plus butonon por aldoni grupoj por categorization unua.</string>
<string name="all">Ĉiuj</string>
<string name="intent_import_card_from_url_share_text">Mi deziras dividi karto kun vi</string>
<string name="exportSuccessful">Datumoj eksportitaj</string>
<string name="noGroupCards">Ĉi tiu grupo estas malplena</string>
<string name="noGiftCards">Klavu la \"+\" butonon por aldoni karton, aŭ importu el la menuo \" ⋮\".</string>
<string name="exportSuccessful">Karto datumo eksportita</string>
<string name="noGroupCards">Ĉi tiu grupo ne enhavas ajnan kartoj</string>
<string name="noGiftCards">Klavu la \"+\" butonon por aldoni karton, aŭ importu uzi menuo \" ⋮\".</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> elektita</item>
<item quantity="other"><xliff:g>%d</xliff:g> elektitaj</item>
<item quantity="one"><xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%d</xliff:g> elektita</item>
<item quantity="other"><xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%d</xliff:g> elektitaj</item>
</plurals>
<string name="app_name">Catima</string>
<string name="barcodeImageDescriptionWithType">Bildo <xliff:g>%s</xliff:g> strikodo</string>
<string name="cameraPermissionRequired">Permeso atingi fotilon estas bezonata por ĉi tiu ago…</string>
<string name="permissionReadCardsLabel">Legi Catima kartojn</string>
<string name="noMatchingGiftCards">Neniu rezulto. Provu ŝanĝi vian serĉon.</string>
<string name="noGiftCardsGroup">Kreu kartojn kaj poste atribuu ilin al la grupo ĉi tie.</string>
<string name="storageReadPermissionRequired">Permeso legi stokadon estas bezonata por ĉi tiu ago…</string>
<string name="unstar">Forigi de miaj markitaj</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Forigi <xliff:g>%d</xliff:g> karton</item>
<item quantity="other">Forigi <xliff:g>%d</xliff:g> kartojn</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Forigi ĉi tiun <xliff:g>%d</xliff:g> karton daŭre?</item>
<item quantity="other">Forigi ĉi tiujn <xliff:g>%d</xliff:g> kartojn daŭre?</item>
</plurals>
<string name="expiryDate">Valida ĝis</string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="noBarcodeFound">Ne eblis trovi strikodon</string>
<string name="balance">Saldo</string>
<string name="moveBarcodeToTopOfScreen">Movi la strekodon al la supro de la ekrano</string>
<string name="errorReadingImage">Ne eblis legi bildon</string>
<string name="settings_brown_theme">Bruna</string>
<string name="showMoreInfo">Montri informojn</string>
<string name="on_github">sur GitHub</string>
<string name="archive">Enarkivigi</string>
<string name="duplicateCard">Duoblaĵo</string>
<string name="unarchived">Karto elarkivigita</string>
<string name="archived">Karto enarkivigita</string>
<string name="failedLaunchingPhotoPicker">Ne povis trovi subtenatan galerian apon</string>
<string name="failedToOpenUrl">Unue instalu retumilon</string>
<string name="importCards">Importi kartojn</string>
<string name="switchToBackImage">Ŝanĝi al malantaŭa bildo</string>
<string name="setBarcodeHeight">Starigi altecon de strikodo</string>
<string name="icon_header_click_text">Premi longe por redakti bildeton</string>
<string name="show_validity">Montri validecon</string>
<string name="addFromImage">Elekti bildon el la galerio</string>
<string name="shortcutSelectCard">Elekti karton</string>
<string name="chooseValidFromDate">Elekti startdaton de valideco</string>
<string name="privacy_policy">Regularo pri privateco</string>
<string name="chooseExpiryDate">Elektu findaton de valideco</string>
<string name="group_updated">Grupo ĝisdatigita</string>
<string name="leaveWithoutSaveTitle">Eliri</string>
<string name="moveDown">Movi malsupren</string>
<string name="leaveWithoutSaveConfirmation">Eliri sen konservi?</string>
<string name="validFromDate">Valida ekde</string>
<string name="accept">Akcepti</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="settings_sky_blue_theme">Ĉielblua</string>
<string name="unarchive">Elarkivigi</string>
<string name="switchToBarcode">Ŝanĝi al strikodo</string>
<string name="currentBalanceSentence">Nuna saldo: <xliff:g>%s</xliff:g></string>
<string name="height">Alteco:</string>
<string name="settings_category_title_general">Ĝenerala</string>
<string name="settings_category_title_privacy">Privateco</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> punkto</item>
<item quantity="other"><xliff:g>%s</xliff:g> punktoj</item>
</plurals>
<string name="group_edit">Redakti grupon</string>
<string name="updateBalanceTitle">Kiom vi elspezis aŭ ricevis?</string>
<string name="updateBalanceHint">Entajpi kvanton</string>
<string name="previousCard">Antaŭa</string>
<string name="nextCard">Sekva</string>
<string name="reverse">inversi la ordon</string>
<string name="translate_platform">sur Weblate</string>
<string name="failedToRetrieveImageFile">Malsukcesis ricevi bildodosieron</string>
<string name="help_translate_this_app">Helpi traduki ĉi tiun apon</string>
<string name="welcome">Bonvenon al Catima</string>
<string name="donate">Doni</string>
<string name="validFromSentence">Valida ekde: <xliff:g>%s</xliff:g></string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Preventas ekranŝloson dum rigardo al karto</string>
<string name="settings_allow_content_provider_read_summary">Apoj devos peti permeson por ricevi aliron</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> karto</item>
<item quantity="other"><xliff:g>%d</xliff:g> kartoj</item>
</plurals>
<string name="group_name_already_in_use">Gruponomo jam uzata</string>
<string name="group_name_is_empty">Gruponomo devas ne esti malplena</string>
<string name="deleteConfirmationGroup">Forigi grupon?</string>
<string name="failedOpeningFileManager">Unue instalu dosiermastrumilon.</string>
<string name="addManually">Entajpi la strikodon permane</string>
<string name="editGroup">Redaktante grupon: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Eksvalidiĝis: <xliff:g>%s</xliff:g></string>
<string name="balanceParsingFailed">Nevalida saldo</string>
<string name="chooseImportType">Importi datumojn de</string>
<string name="importCatima">Importi el Catima</string>
<string name="settings_green_theme">Verda</string>
<string name="updateBalance">Ĝisdatigi saldon</string>
<string name="barcodeLongPressMessage">Nur bildoj povas esti malfermitaj en la galeria apo</string>
<string name="sort_by_name">Nomo</string>
<string name="sort_by_most_recently_used">Plej laste uzitaj</string>
<string name="sort_by_expiry">Dato de eksvalidiĝo</string>
<string name="sort_by">Ordigi laŭ</string>
<string name="version_history">Versio historio</string>
<string name="credits">Dankoj</string>
<string name="license">Permesilo</string>
<string name="and_data_usage">kaj datumuzado</string>
<string name="rate_this_app">Taksi ĉi tiun apon</string>
<string name="report_error">Raporti eraron</string>
<string name="starred">Markitaj</string>
<string name="newBalanceSentence">Nova saldo: <xliff:g>%s</xliff:g></string>
<string name="anyDate">Iam ajn</string>
<string name="switchToFrontImage">Ŝanĝi al antaŭa bildo</string>
<string name="openFrontImageInGalleryApp">Malfermi la antaŭan bildon en galeria apo</string>
<string name="openBackImageInGalleryApp">Malfermi la malantaŭan bildon en galeria apo</string>
<string name="show_name_below_image_thumbnail">Montri nomon sub la bildeto</string>
<string name="show_note">Montri noton</string>
<string name="settings_category_title_cards">Kartoj</string>
<string name="action_display_options">Agordoj de montrado</string>
<string name="show_archived_cards">Montri arkivitajn kartojn</string>
<string name="view_online">Vidi enrete</string>
<string name="action_more_options">Pliaj opcioj</string>
<string name="settings_keep_screen_on_summary">Malŝaltas tempolimon de la ekrano dum rigardo al karto</string>
<string name="settings_disable_lockscreen_while_viewing_card">Preventi la ekranŝloson</string>
<string name="settings_allow_content_provider_read_title">Permesi al aliaj apoj aliri miajn datumojn</string>
<string name="moveUp">Movi supren</string>
<string name="expiryStateSentence">Valida ĝis: <xliff:g>%s</xliff:g></string>
<string name="app_contributors">Ebligita de: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="sort">Ordigi</string>
<string name="source_repository">Koda deponejo</string>
<string name="on_google_play">sur Google Play</string>
<string name="include_if_asking_support">Si vi volas peti subtenon, inkluzivu la sekvan informon:</string>
<string name="options">Opcioj</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> karto (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> kartoj (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
</plurals>
<string name="show_balance">Montri saldon</string>
<string name="addWithoutBarcode">Aldoni karton sen strikodo</string>
<string name="permissionReadCardsDescription">legi viajn Catima-kartojn kaj ĉiujn iliajn detalojn, inkluzive de notoj kaj bildoj</string>
<string name="cameraPermissionDeniedTitle">Fotilo neatingebla</string>
<string name="noCameraPermissionDirectToSystemSetting">Por skani strikodojn Catima bezonas atingorajton al via fotilo. Klaku ĉi tie por ŝanĝi viajn permesajn agordojn.</string>
<string name="app_copyright_short">Kopirajto © Sylvia van Os kaj kontribuantoj</string>
<string name="settings_card_orientation">Orientiĝo de strikodo</string>
<string name="settings_follow_system_orientation">Laŭ la sistemo</string>
<string name="settings_portrait_orientation">Vertikala</string>
<string name="settings_landscape_orientation">Horizontala</string>
<string name="settings_display_barcode_max_brightness_summary">Bezonata por ke iuj skaniloj funkciu</string>
<string name="unsupportedBarcodeType">Ne eblas montri ĉi tiun strikodspecon. Ĝi eble estos subtenata en posta versio de la apo.</string>
<string name="importVoucherVaultMessage">Elektu la <i>vouchervault.json</i> eksporton de Voucher Vault kiun vi volas importi.
\nKreu ĝin unue elektante \"Export\" en Voucher Vault.</string>
<string name="sameAsCardId">Sama kiel la identigo</string>
<string name="setBarcodeId">Starigi la valoron de la strikodo</string>
<string name="barcodeId">Valoro de la strikodo</string>
<string name="passwordRequired">Bonvolu entajpi la pasvorton</string>
<string name="exportPasswordHint">Entajpi pasvorton</string>
<string name="settings_oled_dark_summary">Malpligrandigas baterian uzadon sur OLED-ekranoj</string>
<string name="selectColor">Elekti koloron</string>
<string name="setIcon">Starigi bildeton</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">Rozkolora</string>
<string name="field_must_not_be_empty">Kampo devas ne esti malplena</string>
<string name="manually_enter_barcode_instructions">Entajpu la identigilon aŭ tekston sur via karto kaj premu la strikodon kiu aspektas kiel tiu sur via karto.</string>
<string name="importStocardMessage">Elektu la <i>***.zip</i> eksoporton de Stocard kiun vi volas importi.
\nAkiru ĝin sendante retpoŝton al support@stocardapp.com petante eksporton de viaj datumoj.</string>
<string name="turn_flashlight_off">Malŝalti poŝlampon</string>
<string name="add_manually_warning_title">Skani estas rekomendata</string>
<string name="continue_">Daŭrigi</string>
<string name="settings_oled_dark">Pura nigra fono por malhela temo</string>
<string name="importLoyaltyCardKeychain">Importi el Loyalty Card Keychain</string>
<string name="importFidmeMessage">Elektu la <i>fidme-export-request-xxxxxx.zip</i> exporton de FidMe kiun vi volas importi kaj poste elektu la tipojn de strikodo permane.
\nKreu ĝin en via FidMe profilo elektante \"Data Protection\" kaj poste \"Extract my data\".</string>
<string name="backImageDescription">Malantaŭa bildo</string>
<string name="noCameraFoundGuideText">Via aparato ŝajnas ne havi fotilon. Se jes, provu restartigi la aparaton. Alie, uzu la butonon \"Pliaj opcioj\" sube por aldoni strikodon alimaniere.</string>
<string name="wrongValueForBarcodeType">La valoro ne validas por la elektita tipo de strikodo</string>
<string name="importCancelled">Importado nuligita</string>
<string name="exportCancelled">Eksportado nuligita</string>
<string name="settings_theme_color">Koloro de la temo</string>
<string name="app_libraries">Liberaj triaj bibliotekoj: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="addFromPdfFile">Elekti PDF-dosieron</string>
<string name="failedLaunchingFileManager">Subtenata dosiermastrumilo ne trovebla</string>
<string name="errorReadingFile">Dosiero nelegebla</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Kiun el la trovitaj strikodoj vi volas uzi?</string>
<string name="pageWithNumber">Paĝo <xliff:g>%d</xliff:g></string>
<string name="settings_system_locale">Sistemo</string>
<string name="app_resources">Liberaj triaj risurcoj: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="settings_follow_sensor_orientation">Ĉiam turni (ignori la agordojn de la sistemo)</string>
<string name="settings_lock_on_opening_orientation">Fiksi al la orientiĝo uzata dum malfermado de la karto</string>
<string name="importCatimaMessage">Elektu la <i>catima.zip</i> eksporton kiun vi volas importi.
\nKreu ĝin unue en la importi/eksporti menuo en alia Catima apo elektante \'eksporti\' tie.</string>
<string name="importFidme">Importi el FidMe</string>
<string name="exportPassword">Starigi pasvorton por protekti vian eksporton (nedevige)</string>
<string name="failedGeneratingShareURL">Komunigebla URL ne generebla. Bonvolu raporti.</string>
<string name="intent_import_card_from_url_share_multiple_text">Mi volas kunhavigi kelkajn kartojn kun vi</string>
<string name="frontImageDescription">Antaŭa bildo</string>
<string name="setFrontImage">Starigi antaŭan bildon</string>
<string name="setBackImage">Starigi malantaŭan bildon</string>
<string name="removeImage">Forigi bildon</string>
<string name="updateBarcodeQuestionTitle">Ĉu ĝisdatigi strikodvaloron?</string>
<string name="updateBarcodeQuestionText">Vi ŝanĝis la identigon. Ĉu vi volas ankaŭ ĝisdatigi la strikodon por uzi la saman valoron?</string>
<string name="importLoyaltyCardKeychainMessage">Elektu la <i>LoyaltyCardKeychain.csv</i> eksporton de Loyalty Card Keychain kiun vi volas importi.
\nKreu ĝin unue de la \"Importi/eksporti\" menuo en Loyalty Card Keychain elektante \"eksporti\" tie.</string>
<string name="importStocard">Importi de Stocard</string>
<string name="importVoucherVault">Importi el Voucher Vault</string>
<string name="turn_flashlight_on">Enŝalti poŝlampon</string>
<string name="settings_locale">Lingvo</string>
<string name="settings_magenta_theme">Maĝenta</string>
<string name="settings_violet_theme">Viola</string>
<string name="settings_blue_theme">Blua</string>
<string name="enter_card_id">Entajpu la identigilon aŭ tekston sur via karto</string>
<string name="card_id_must_not_be_empty">Identigilo devas ne esti malplena</string>
<string name="add_a_card_in_a_different_way">Aldoni karton alimaniere</string>
<string name="add_manually_warning_message">Ĉe kelkaj butikoj la strikodo malsamas la numero skribita sur la karto. Pro tio, enigi strikodon permane eble ne ĉiam funkcias. Estas forte rekomendite skani la strikodon per via fotilo anstataŭe. Ĉu vi ankoraŭ volas daŭrigi?</string>
<string name="spend">Elspezi</string>
<string name="receive">Ricevi</string>
<string name="app_license">Rajtocedita libera softwaro, licencita laŭ GPLv3+</string>
<string name="amountParsingFailed">Nevalida kvanto</string>
<string name="useBackImage">Uzi la malantaŭan bildon</string>
<string name="useFrontImage">Uzi la antaŭan bildon</string>
</resources>

View File

@@ -70,7 +70,7 @@
<string name="backImageDescription">Imágen dorsal</string>
<string name="noCameraPermissionDirectToSystemSetting">Para escanear códigos de barra, Catima necesitará acceso a la cámara. Presione aquí para cambiar la configuración de sus permisos.</string>
<string name="settings_lock_on_opening_orientation">Bloquear a la orientación utilizada al abrir la tarjeta</string>
<string name="app_loyalty_card_keychain">Cartera para Tarjetas de Fidelización</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="importOptionFilesystemTitle">Importar desde su sistema de archivos</string>
<string name="leaveWithoutSaveTitle">Salir</string>
<string name="expiryStateSentence">Expira: <xliff:g>%s</xliff:g></string>
@@ -103,6 +103,9 @@
<string name="settings_keep_screen_on">Mantener la pantalla encendida</string>
<string name="setBarcodeId">Establecer valor del código de barras</string>
<string name="importCatima">Importar desde Catima</string>
<string name="privacy_policy_popup_text">Notificación de la política de privacidad (requerida por algunas tiendas de aplicaciones):
\n
\nNINGÚN DATO ES RECOPILADO, puede ser comprobado por cualquiera ya que nuestra aplicación es software libre.</string>
<string name="settings_follow_system_orientation">Seguir el sistema</string>
<string name="intent_import_card_from_url_share_text">Quiero compartirte una tarjeta</string>
<string name="addFromImage">Seleccione una imágen desde la galería</string>
@@ -181,36 +184,4 @@
<string name="settings_keep_screen_on_summary">Deshabilita el tiempo de espera de la pantalla mientras se ve una tarjeta</string>
<string name="thumbnailDescription">Miniatura</string>
<string name="deleteConfirmationGroup">¿Eliminar grupo\?</string>
<string name="updateBarcodeQuestionText">Has cambiado el ID. ¿Quieres actualizar también el código de barras para usar el mismo valor?</string>
<string name="settings_locale">Idioma</string>
<string name="settings_system_locale">Sistema</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">Rosa</string>
<string name="exportPassword">Agregar una contraseña para protejer tu exportación (opcional)</string>
<string name="settings_sky_blue_theme">Celeste</string>
<string name="settings_green_theme">Verde</string>
<string name="exportPasswordHint">Ingresar contraseña</string>
<string name="setIcon">Establecer miniatura</string>
<string name="showMoreInfo">Mostrar información</string>
<string name="turn_flashlight_on">Encender linterna</string>
<string name="turn_flashlight_off">Apagar linterna</string>
<string name="updateBalance">Actualizar balance</string>
<string name="failedToRetrieveImageFile">Error al obtener archivo de imagen</string>
<string name="settings_oled_dark_summary">Reduce uso de batería en pantallas OLED</string>
<string name="settings_oled_dark">Fondo negro puro para tema oscuro</string>
<string name="selectColor">Seleccionar color</string>
<string name="settings_theme_color">Color del tema</string>
<string name="settings_magenta_theme">Magenta</string>
<string name="settings_violet_theme">Violeta</string>
<string name="settings_brown_theme">Marrón</string>
<string name="sort">Ordenar</string>
<string name="settings_blue_theme">Azul</string>
<string name="app_contributors">Hecho posible por: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="barcodeLongPressMessage">Solo se puede abrir imágenes en la aplicación de galería</string>
<string name="settings_follow_sensor_orientation">Siempre rotar (ignora configuración del sistema)</string>
<string name="yes">Si</string>
<string name="no">No</string>
<string name="passwordRequired">Por favor ingresa la contraseña</string>
<string name="failedGeneratingShareURL">No se pudo generar URL compartible. Por favor reporte esto.</string>
<string name="sort_by_name">Nombre</string>
</resources>

View File

@@ -4,7 +4,7 @@
<string name="noGiftCards">Haz clic en el botón + para añadir una tarjeta, o importa desde el menú ⋮.</string>
<string name="storeName">Nombre</string>
<string name="note">Nota</string>
<string name="cardId">ID de tarjeta</string>
<string name="cardId">ID. de tarjeta</string>
<string name="cancel">Cancelar</string>
<string name="save">Guardar</string>
<string name="edit">Editar</string>
@@ -20,7 +20,7 @@
<string name="noCardExistsError">No se ha podido encontrar esa tarjeta</string>
<string name="importExport">Importar/Exportar</string>
<string name="exportName">Exportar</string>
<string name="importExportHelp">Respaldar tus datos permite trasladarlos a otro dispositivo.</string>
<string name="importExportHelp">Hacer una copia de seguridad de los datos permite trasladarlos a otro dispositivo.</string>
<string name="importSuccessfulTitle">Importado</string>
<string name="importFailedTitle">Falló la importación</string>
<string name="importFailed">No se ha podido realizar la importación</string>
@@ -33,14 +33,14 @@
<string name="importOptionFilesystemExplanation">Elegir un archivo concreto del sistema de archivos.</string>
<string name="importOptionFilesystemButton">Desde el sistema de archivos</string>
<string name="importOptionApplicationTitle">Utilizar otra aplicación</string>
<string name="importOptionApplicationExplanation">Usa cualquier aplicación o tu administrador de archivos favorito para abrir un archivo.</string>
<string name="importOptionApplicationExplanation">Use una aplicación o su gestor de archivos favoritos para abrir un archivo.</string>
<string name="importOptionApplicationButton">Utilizar otra aplicación</string>
<string name="about">Información</string>
<string name="about">Acerca de</string>
<string name="app_license">Programa libre con «copyleft», disponible en virtud de la licencia GPLv3+</string>
<string name="about_title_fmt">Acerca de <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Versión: <xliff:g id="version">%s</xliff:g></string>
<string name="settings">Ajustes</string>
<string name="settings_display_barcode_max_brightness">Iluminar pantalla</string>
<string name="settings_display_barcode_max_brightness">Iluminar vista del código de barras</string>
<string name="exportSuccessful">Datos exportados</string>
<string name="importSuccessful">Datos importados</string>
<string name="intent_import_card_from_url_share_text">Quiero compartirte una tarjeta</string>
@@ -56,16 +56,16 @@
<string name="barcodeType">Tipo de código de barras</string>
<string name="noMatchingGiftCards">Sin resultados. Intente cambiar su búsqueda.</string>
<string name="action_search">Buscar</string>
<string name="noGroups">Pulse en el botón + para añadir grupos de categorización.</string>
<string name="noGroups">Pulse en el botón «+» para añadir grupos de categorización.</string>
<string name="starImage">Estrella favorita</string>
<string name="thumbnailDescription">Miniatura</string>
<string name="selectBarcodeTitle">Seleccionar el código de barras</string>
<string name="unstar">Eliminar de favoritos</string>
<string name="noBarcode">Sin código de barras</string>
<string name="enter_group_name">Escribe el nombre del grupo</string>
<string name="enter_group_name">Introducir nombre del grupo</string>
<string name="groups">Grupos</string>
<string name="groupsList">Grupos: <xliff:g>%s</xliff:g></string>
<string name="addManually">Escribe manualmente el código de barras</string>
<string name="addManually">Introducir manualmente el código de barras</string>
<string name="leaveWithoutSaveConfirmation">¿Quiere abandonar sin guardar\?</string>
<string name="leaveWithoutSaveTitle">Salir</string>
<string name="moveDown">Bajar</string>
@@ -115,7 +115,7 @@
<string name="removeImage">Quitar imagen</string>
<string name="setFrontImage">Establecer imagen frontal</string>
<string name="photos">Fotos</string>
<string name="backImageDescription">Imagen de atrás</string>
<string name="backImageDescription">Imagen del reverso</string>
<string name="frontImageDescription">Imagen frontal</string>
<string name="wrongValueForBarcodeType">El valor no es válido para el tipo de código de barras seleccionado</string>
<string name="unsupportedBarcodeType">Este tipo de código de barras todavía no se puede visualizar. Es posible que se admita en una futura versión de la aplicación.</string>
@@ -128,6 +128,9 @@
<string name="importFidme">Importar desde FidMe</string>
<string name="importCatima">Importar desde Catima</string>
<string name="accept">Aceptar</string>
<string name="privacy_policy_popup_text">Aviso de política de privacidad (requerido por algunas tiendas de apps):
\n
\nNINGÚN DATO SE RECOPILA, cualquiera puede confirmar ya que nuestra aplicación es software libre.</string>
<string name="privacy_policy">Política de privacidad</string>
<string name="app_loyalty_card_keychain">Llavero con tarjeta de fidelización</string>
<string name="chooseImportType">Importar datos de</string>
@@ -156,8 +159,8 @@
<item quantity="many">Borrar <xliff:g>%d</xliff:g> tarjetas</item>
<item quantity="other">Borrar <xliff:g>%d</xliff:g> tarjetas</item>
</plurals>
<string name="app_contributors">Hecho posible por: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="settings_brown_theme">Marrón</string>
<string name="settings_grey_theme">Gris</string>
<string name="settings_green_theme">Verde</string>
<string name="settings_sky_blue_theme">Azul cielo</string>
<string name="settings_blue_theme">Azul</string>
@@ -176,14 +179,14 @@
<item quantity="other"><xliff:g>%s</xliff:g> puntos</item>
</plurals>
<string name="barcodeImageDescriptionWithType">Imagen <xliff:g>%s</xliff:g> código de barras</string>
<string name="settings_card_orientation">Orientación de pantalla</string>
<string name="settings_card_orientation">Orientación del código de barras</string>
<string name="settings_portrait_orientation">Formato vertical</string>
<string name="group_edit">Editar grupo</string>
<string name="group_updated">Grupo actualizado</string>
<string name="noGiftCardsGroup">Crea algunas tarjetas y luego asígnelas al grupo aquí.</string>
<string name="settings_follow_system_orientation">Segue el sistema</string>
<string name="noGiftCardsGroup">Cree algunas tarjetas y luego asígnelas al grupo aquí.</string>
<string name="settings_follow_system_orientation">Seguir el sistema</string>
<string name="settings_lock_on_opening_orientation">Bloqueo a la orientación utilizada al abrir la tarjeta</string>
<string name="sort_by_most_recently_used">Lo más usado recientemente</string>
<string name="sort_by_most_recently_used">Lo más reciente que se ha utilizado</string>
<string name="sort_by_expiry">Caducidad</string>
<string name="version_history">Historial de versiones</string>
<string name="help_translate_this_app">Ayuda a traducir esta aplicación</string>
@@ -195,7 +198,7 @@
<string name="sort_by_name">Nombre</string>
<string name="license">Licencia</string>
<string name="source_repository">Repositorio de fuente</string>
<string name="on_github">en GitHub</string>
<string name="on_github">En GitHub</string>
<string name="on_google_play">en Google Play</string>
<string name="report_error">Informar de un error</string>
<string name="translate_platform">en Weblate</string>
@@ -206,6 +209,11 @@
<string name="rate_this_app">Califica esta aplicación</string>
<string name="options">Opciones</string>
<string name="failedToOpenUrl">Instale primero un navegador web</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Ver archivo (<xliff:g>%1$d</xliff:g> tarjeta)</item>
<item quantity="many">Ver archivo (<xliff:g>%1$d</xliff:g> tarjetas)</item>
<item quantity="other">Ver archivo (<xliff:g>%1$d</xliff:g> tarjetas)</item>
</plurals>
<string name="welcome">Bienvenido/a a Catima</string>
<string name="group_name_already_in_use">Nombre del grupo ya está en uso</string>
<string name="group_name_is_empty">El nombre del grupo no debe estar vacío</string>
@@ -221,7 +229,7 @@
<string name="archived">Tarjeta archivada</string>
<string name="unarchived">Tarjeta desarchivada</string>
<string name="exportPassword">Establezca una contraseña para proteger su exportación (opcional)</string>
<string name="failedLaunchingPhotoPicker">No se ha encontró una aplicación de galería compatible</string>
<string name="failedLaunchingPhotoPicker">No se ha podido encontrar una aplicación de galería compatible</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> tarjeta (archivada)<xliff:g id="archivedCount">%2$d</xliff:g></item>
<item quantity="many"><xliff:g>%1$d</xliff:g> tarjetas (archivadas)<xliff:g id="archivedCount">%2$d</xliff:g></item>
@@ -230,7 +238,7 @@
<string name="starred">Estrellado</string>
<string name="failedToRetrieveImageFile">No se pudo recuperar el archivo de imagen</string>
<string name="barcodeLongPressMessage">Solo se pueden abrir imágenes en la aplicación de galería</string>
<string name="updateBalanceTitle">¿Cuánto has gastado o recibido?</string>
<string name="updateBalanceTitle">¿Cuánto has gastado\?</string>
<string name="currentBalanceSentence">Saldo actual: <xliff:g>%s</xliff:g></string>
<string name="noCameraPermissionDirectToSystemSetting">Para escanear códigos de barras, Catima necesitará acceso a su cámara. Toque aquí para cambiar la configuración de sus permisos.</string>
<string name="updateBalanceHint">Introduzca el importe</string>
@@ -264,7 +272,7 @@
<string name="settings_keep_screen_on_summary">Deshabilita el tiempo de espera de la pantalla mientras se ve una tarjeta</string>
<string name="settings_allow_content_provider_read_summary">Las aplicaciones todavía tendrán que solicitar permiso para conseguir acceso</string>
<string name="settings_oled_dark_summary">Reduce el uso de batería en pantallas OLED</string>
<string name="settings_category_title_cards">Vista de tarjeta</string>
<string name="settings_category_title_cards">Tarjetas</string>
<string name="settings_category_title_general">General</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Deshabilita el bloqueo de pantalla mientras se ve una tarjeta</string>
<string name="settings_category_title_privacy">Privacidad</string>
@@ -281,23 +289,4 @@
<string name="addWithoutBarcode">Añadir una tarjeta sin código de barras</string>
<string name="field_must_not_be_empty">Este campo no debe estar vacío</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Girar siempre (ignora la configuración del sistema)</string>
<string name="continue_">Continuar</string>
<string name="add_manually_warning_title">Se recomienda escanear</string>
<string name="add_manually_warning_message">En algunas tiendas, el valor del código de barras difiere del número escrito en la tarjeta. Por este motivo, es posible que la introducción manual del código de barras no siempre funcione. Se recomienda encarecidamente escanear el código de barras con la cámara. ¿Aún desea continuar?</string>
<string name="spend">Gastar</string>
<string name="receive">Recibió</string>
<string name="amountParsingFailed">Importe incorrecto</string>
<string name="addFromPdfFile">Seleccionar un archivo PDF</string>
<string name="errorReadingFile">No se ha podido leer el archivo</string>
<string name="failedLaunchingFileManager">No se ha podido encontrar un gestor de archivos compatible</string>
<string name="multipleBarcodesFoundPleaseChooseOne">¿Cuál de los códigos de barras encontrados desea utilizar?</string>
<string name="pageWithNumber">Página <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Tu dispositivo no parece tener cámara. Si la tiene, intente reiniciar el dispositivo. De lo contrario, utilice el botón Más opciones a continuación para añadir un código de barras de otra manera.</string>
<string name="importCancelled">Importación cancelada</string>
<string name="exportCancelled">Exportación cancelada</string>
<string name="useFrontImage">Utilice la imagen frontal</string>
<string name="useBackImage">Utilice la imagen trasera</string>
<string name="settings_use_volume_keys_navigation_summary">Utiliza los botones de volumen para cambiar que tarjeta se muestra</string>
<string name="settings_use_volume_keys_navigation">Cambiar de tarjetas usando los botones de volumen</string>
</resources>

View File

@@ -1,292 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_add">Lisa</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> valitud</item>
<item quantity="other"><xliff:g>%d</xliff:g> valitud</item>
</plurals>
<string name="noGiftCardsGroup">Lisa mõned kaardid ja siis jaga nad gruppidesse.</string>
<string name="noMatchingGiftCards">Tulemusi pole. Palun proovi muuta otsingut.</string>
<string name="storeName">Nimi</string>
<string name="note">Märkus</string>
<string name="cardId">Kaardi tunnus</string>
<string name="barcodeType">Triipkoodi tüüp</string>
<string name="noBarcode">Triipkood puudub</string>
<string name="star">Lisa lemmikuks</string>
<string name="edit">Muuda</string>
<string name="delete">Kustuta</string>
<string name="confirm">Kinnita</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Kustuta <xliff:g>%d</xliff:g> kaart</item>
<item quantity="other">Kustuta <xliff:g>%d</xliff:g> kaarti</item>
</plurals>
<string name="deleteConfirmation">Kas kustutame selle kaardi jäädavalt?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Kas kustutame <xliff:g>%d</xliff:g> kaardi jäädavalt?</item>
<item quantity="other">Kas kustutame <xliff:g>%d</xliff:g> kaarti jäädavalt?</item>
</plurals>
<string name="ok">Sobib</string>
<string name="share">Jaga</string>
<string name="sendLabel">Saada…</string>
<string name="editCardTitle">Muuda kaarti</string>
<string name="addCardTitle">Lisa kaart</string>
<string name="scanCardBarcode">Skaneeri triipkoodi</string>
<string name="app_name">Catima</string>
<string name="noGiftCards">Kaardi lisamiseks klõpsi + pluss nuppu või impordi ⋮ikooniga menüüst.</string>
<string name="action_search">Otsi</string>
<string name="unstar">Eemalda lemmikute hulgast</string>
<string name="cancel">Katkesta</string>
<string name="save">Salvesta</string>
<string name="deleteTitle">Kustuta kaart</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Autoriõigused © 2019<xliff:g>%d</xliff:g> Sylvia van Os ja kaasautorid</string>
<string name="app_copyright_old">Põhineb sarnasel rakendusel Loyalty Card Keychain
\nautoriõigused © 20162020 Branden Archer</string>
<string name="selectBarcodeTitle">Vali triipkood</string>
<string name="settings_light_theme">Hele kujundus</string>
<string name="settings_dark_theme">Tume kujundus</string>
<string name="thumbnailDescription">Pisipilt</string>
<string name="settings_theme">Kujundus</string>
<string name="settings_card_orientation">Ekraanipaigutuse suund</string>
<string name="settings_follow_sensor_orientation">Alati pööra (eira süsteemset paigutust)</string>
<string name="settings_landscape_orientation">Rõhtvaade</string>
<string name="settings_display_barcode_max_brightness">Tee ekraan eredamaks</string>
<string name="app_license">Copyleft-tüüpi autoriõiguste alusel loodud avatud lähtekoodiga tarkvara, mis on avaldatud GPLv3+ all</string>
<string name="settings_keep_screen_on">Hoia ekraan sisselülitatuna</string>
<string name="cardShortcut">Kaardi kiirviide</string>
<string name="noCardsMessage">Esmalt lisa kaart</string>
<string name="barcodeImageDescriptionWithType">Kaardi <xliff:g>%s</xliff:g> tiipkood</string>
<string name="noCardExistsError">Seda kaarti ei leidu</string>
<string name="failedParsingImportUriError">Impordi aadressi töötlemine ei õnnestunud</string>
<string name="importExport">Import/eksport</string>
<string name="exportName">Ekspordi</string>
<string name="importExportHelp">Andmete varundamine võimaldab sul neid tõsta mõnda teise seadmesse.</string>
<string name="importSuccessfulTitle">Imporditud</string>
<string name="importFailedTitle">Import ei õnnestunud</string>
<string name="exportSuccessfulTitle">Eksporditud</string>
<string name="exportFailedTitle">Eksportimine ei õnnestunud</string>
<string name="exportFailed">Eksportimist ei õnnestunud teha</string>
<string name="importing">Impordime…</string>
<string name="exporting">Ekspordime…</string>
<string name="storageReadPermissionRequired">Selle tegevuse jaoks on vajalikud õigused andmekandalt lugemiseks…</string>
<string name="importFailed">Importimist ei õnnestunud teha</string>
<string name="cameraPermissionRequired">Selle tegevuse jaoks on vajalikud õigused kaamera kasutamiseks…</string>
<string name="permissionReadCardsLabel">Loe Catima kaarte</string>
<string name="permissionReadCardsDescription">loe kõiki oma Catima kaarte koos nende üksikasjadega, sealhulgas märkuste ja piltidega</string>
<string name="cameraPermissionDeniedTitle">Puudub ligipääs kaamerale</string>
<string name="noCameraPermissionDirectToSystemSetting">Triipkoodide skaneerimiseks vajab Catima õigust asutada kaamerat. Õiguste andmiseks klõpsi siin.</string>
<string name="exportOptionExplanation">Andmed salvestame sinu valitud asukohta.</string>
<string name="importOptionFilesystemTitle">Impordi failisüsteemist</string>
<string name="importOptionFilesystemExplanation">Vali vajalik impordifail failisüsteemist.</string>
<string name="importOptionFilesystemButton">Vali failisüsteemist</string>
<string name="importOptionApplicationTitle">Kasuta muust rakendusest eksporditud andmeid</string>
<string name="importOptionApplicationExplanation">Kasuta faili avamiseks mõnda muud rakendust või sinu lemmikfailihaldurit.</string>
<string name="importOptionApplicationButton">Vali muu rakenduse ekspordifail</string>
<string name="about">Rakenduse teave</string>
<string name="app_copyright_short">Autoriõigused © Sylvia van Os ja kaasautorid</string>
<string name="about_title_fmt">Teave <xliff:g id="app_name">%s</xliff:g> kohta</string>
<string name="debug_version_fmt">Versioon: <xliff:g id="version">%s</xliff:g></string>
<string name="app_libraries">Kolmandate osapoolte avatud lähtekoodiga teegid: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Kolmandate osapoolte avatud lähtekoodiga materjalid: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="starImage">Lemmikut märkiv täht</string>
<string name="settings">Seadistused</string>
<string name="settings_system_theme">Süsteemi kujundus</string>
<string name="settings_follow_system_orientation">Järgi süsteemset paigutust</string>
<string name="settings_portrait_orientation">Püstvaade</string>
<string name="settings_lock_on_opening_orientation">Kaardivaate avamisel lukusta paigutus</string>
<string name="settings_display_barcode_max_brightness_summary">See on vajalik mõnede skännerite toimimiseks</string>
<string name="expiryStateSentenceExpired">Aegus: <xliff:g>%s</xliff:g></string>
<string name="settings_allow_content_provider_read_summary">Selle valiku sisselülitamisel peavad muud rakendused lisaks küsima õigust vaadata kaartide andmeid</string>
<string name="noGroups">Kui soovid sarnaseid kaarte omavahel liigitada siis + pluss nupuga lisa kaardigruppe.</string>
<string name="group_name_is_empty">Kaardigrupi nimi ei saa jääda tühjaks</string>
<string name="groupsList">Grupid: <xliff:g>%s</xliff:g></string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> kaart (<xliff:g id="archivedCount">%2$d</xliff:g> arhiveeritud)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> kaarti (<xliff:g id="archivedCount">%2$d</xliff:g> arhiveeritud)</item>
</plurals>
<string name="moveUp">Liiguta ülespoole</string>
<string name="moveDown">Liiguta allapoole</string>
<string name="leaveWithoutSaveConfirmation">Kas väljume ilma salvestamata?</string>
<string name="chooseExpiryDate">Vali aegumise kuupäev</string>
<string name="leaveWithoutSaveTitle">Välju</string>
<string name="addManually">Sisesta triipkood käsitsi</string>
<string name="addFromImage">Vali galeriist pilt</string>
<string name="balanceSentence">Maksejääk: <xliff:g>%s</xliff:g></string>
<string name="card">Kaart</string>
<string name="editBarcode">Muuda triipkoodi</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> punkt</item>
<item quantity="other"><xliff:g>%s</xliff:g> punkti</item>
</plurals>
<string name="expiryDate">Aegumise kuupäev</string>
<string name="never">Mitte kunagi</string>
<string name="showMoreInfo">Näita teavet</string>
<string name="importLoyaltyCardKeychainMessage">Importimiseks vali oma <i>LoyaltyCardKeychain.csv</i> Loyalty Card Keychaini ekspordifail. \nSellise faili saad teha rakendusest Loyalty Card Keychain valides menüüst Import/Eksport valiku Eksport.</string>
<string name="unsupportedBarcodeType">Sellist triipkoodi tüüpi pole veel võimalik kuvada, aga mõnes hilisemas rakenduse versioonis võib see võimalik olla.</string>
<string name="wrongValueForBarcodeType">Väärtus ei sobi selle triipkoodi tüübiga</string>
<string name="passwordRequired">Palun sisesta salasõna</string>
<string name="updateBarcodeQuestionTitle">Kas uuendame triipkoodi väärtust?</string>
<string name="yes">Jah</string>
<string name="no">Ei</string>
<string name="settings_theme_color">Kujunduse värv</string>
<string name="settings_pink_theme">Roosa</string>
<string name="barcodeLongPressMessage">Galeriirakenduses saad avada vaid pilte</string>
<string name="sort_by_most_recently_used">Viimati kasutatud</string>
<string name="sort_by_expiry">Aegumine</string>
<string name="reverse">…tagurpidi järjekorras</string>
<string name="sort_by">Järjestuse alus</string>
<string name="version_history">Versioonide ajalugu</string>
<string name="help_translate_this_app">Aita seda rakendust tõlkida</string>
<string name="on_github">GitHubis</string>
<string name="license">Litsents</string>
<string name="source_repository">Lähtekoodi hoidla</string>
<string name="and_data_usage">ja andmekasutus</string>
<string name="options">Valikud</string>
<string name="rate_this_app">Hinda seda rakendust</string>
<string name="on_google_play">Google Play rakendustepoes</string>
<string name="report_error">Teata vigadest</string>
<string name="translate_platform">tõlkerakenduses Weblate</string>
<string name="shortcutSelectCard">Vali kaart</string>
<string name="starred">Tähekesega märgitud</string>
<string name="intent_import_card_from_url_share_multiple_text">Ma soovin sinuga jagada mõnda oma kliendikaarti</string>
<string name="settings_keep_screen_on_summary">Lülitab kaardi vaatamise ajaks välja ekraani energiahalduse</string>
<string name="settings_disable_lockscreen_while_viewing_card">Keela ekraanilukustus</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Lülitab kaardi vaatamise ajaks välja ekraani lukustamise</string>
<string name="settings_allow_content_provider_read_title">Luba teistel rakendustel minu andmeid lugeda</string>
<string name="importSuccessful">Andmed on imporditud</string>
<string name="exportSuccessful">Andmed on eksporditud</string>
<string name="enter_group_name">Sisesta kaardigrupi nimi</string>
<string name="groups">Grupid</string>
<string name="group_edit">Muuda gruppi</string>
<string name="noGroupCards">See grupp on tühi</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> kaart</item>
<item quantity="other"><xliff:g>%d</xliff:g> kaarti</item>
</plurals>
<string name="group_name_already_in_use">Selline kaardigrupi nimi on juba kasutusel</string>
<string name="group_updated">Kaardigrupp on uuendatud</string>
<string name="deleteConfirmationGroup">Kas kustutame grupi?</string>
<string name="all">Kõik</string>
<string name="failedOpeningFileManager">Esmalt paigalda failihaldur.</string>
<string name="intent_import_card_from_url_share_text">Ma soovin sinuga jagada ühte oma kliendikaarti</string>
<string name="editGroup">Muudame gruppi: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Aegub: <xliff:g>%s</xliff:g></string>
<string name="moveBarcodeToTopOfScreen">Tõsta triipkood ekraani ülaossa</string>
<string name="noBarcodeFound">Ühtegi triipkoodi ei leidunud</string>
<string name="errorReadingImage">Pildi lugemine ei õnnestunud</string>
<string name="balance">Maksejääk</string>
<string name="currency">Valuuta</string>
<string name="points">Punkte</string>
<string name="balanceParsingFailed">Vigane maksejääk</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="privacy_policy">Privaatsuspoliitika</string>
<string name="accept">Nõustu</string>
<string name="importCatima">Impordi Catima varukoopiast</string>
<string name="importCatimaMessage">Importimiseks vali varem tehtud <i>catima.zip</i> Catima ekspordifail. \nSellise faili saad luua mõnes teises seadmes olevast Catima rakendusest Import/Eksport menüüst valikust Eksport.</string>
<string name="importFidme">Impordi FidMe varukoopiast</string>
<string name="importFidmeMessage">Importimiseks vali oma <i>fidme-export-request-xxxxxx.zip</i>, mille oled FidMe rakendusest eksportinud. Peale importi määra triipkoodi tüübid käsistsi. \nSellise faili loomiseks vali oma FidMe profiilist eelistuse Andmekaitse-Paki lahti.</string>
<string name="importLoyaltyCardKeychain">Impordi rakendusest Loyalty Card Keychain</string>
<string name="importStocard">Impordi Stocardist</string>
<string name="importStocardMessage">Importimiseks vali oma <i>***.zip</i> Stocardi ekspordifail. \nSellise faili saad saates kirja aadressile support@stocardapp.com ning küsides oma andmeid.</string>
<string name="chooseImportType">Importimise valikud</string>
<string name="importVoucherVault">Impordi rakendusest Voucher Vault</string>
<string name="importVoucherVaultMessage">Importimiseks vali oma <i>vouchervault.json</i> Voucher Vaulti ekspordifail. \nSellise faili saad teha rakenduses Voucher Vault menüüvalikust Eksport.</string>
<string name="barcodeId">Triipkoodi väärtus</string>
<string name="sameAsCardId">Sama, kui ID</string>
<string name="setBarcodeId">Sisesta triipkoodi väärtus</string>
<string name="frontImageDescription">Esikülje pilt</string>
<string name="backImageDescription">Tagakülje pilt</string>
<string name="photos">Fotod</string>
<string name="setFrontImage">Halda esikülje pilti</string>
<string name="setBackImage">Halda tagakülje pilti</string>
<string name="removeImage">Eemalda pilt</string>
<string name="takePhoto">Tee foto</string>
<string name="updateBarcodeQuestionText">Sa muutsid ID väärtust? Kas sa soovid ka triipkoodiväärtuse vastavalt uuendada?</string>
<string name="exportPassword">Sinu eksporditavate andmete turvamiseks palun sisesta salasõna (kui soovid seda)</string>
<string name="exportPasswordHint">Sisesta salasõna</string>
<string name="failedGeneratingShareURL">Jagatava võrguaadressi loomine ei õnnestunud. Palun anna sellest meile teada.</string>
<string name="turn_flashlight_on">Lülita taskulamp sisse</string>
<string name="turn_flashlight_off">Lülita taskulamp välja</string>
<string name="settings_locale">Keel</string>
<string name="settings_oled_dark">Süsimust taust tumeda kujunduse puhul</string>
<string name="settings_oled_dark_summary">OLED-ekraani puhul võimaldab see akukasutust vähendada</string>
<string name="settings_system_locale">Süsteemi keel</string>
<string name="selectColor">Vali värv</string>
<string name="setIcon">Lisa pisipilt</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_magenta_theme">Fuksiapunane</string>
<string name="settings_violet_theme">Punakassinine</string>
<string name="settings_blue_theme">Sinine</string>
<string name="settings_sky_blue_theme">Taevasinine</string>
<string name="settings_green_theme">Roheline</string>
<string name="settings_brown_theme">Pruun</string>
<string name="app_contributors">Seda rakendust on aidanud teha: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="sort">Järjesta</string>
<string name="updateBalance">Uuenda maksejääki</string>
<string name="failedToRetrieveImageFile">Pildifaili laadimine ei õnnestunud</string>
<string name="sort_by_name">Nimi</string>
<string name="importCards">Impordi kaardid</string>
<string name="updateBalanceTitle">Kui palju sa kulutasid või teenisid?</string>
<string name="updateBalanceHint">Sisesta summa</string>
<string name="currentBalanceSentence">Praegune maksejääk: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">Uus maksejääk: <xliff:g>%s</xliff:g></string>
<string name="show_balance">Näita maksejääki</string>
<string name="credits">Tänuavaldused</string>
<string name="include_if_asking_support">Kasutajatoe päringusse palun lisa alljärgnev teave:</string>
<string name="duplicateCard">Tee koopia</string>
<string name="archive">Arhiveeri</string>
<string name="unarchive">Eemalda arhiivist</string>
<string name="archived">Kaart on arhiveeritud</string>
<string name="unarchived">Kaart on arhiivist eemaldatud</string>
<string name="failedLaunchingPhotoPicker">Ei õnnestunud leida toetatud galeriirakendust</string>
<string name="previousCard">Eelmine</string>
<string name="nextCard">Järgmine</string>
<string name="failedToOpenUrl">Esmalt paigalda veebibrauser</string>
<string name="welcome">Tere tulemast kasutama kliendikaartide haldurit Catima</string>
<string name="validFromDate">Kehtib alates</string>
<string name="anyDate">Ükspuha, mis kuupäev</string>
<string name="chooseValidFromDate">Vali korrektne kehtivuse alguse kuupäev</string>
<string name="validFromSentence">Kehtib alates: <xliff:g>%s</xliff:g></string>
<string name="height">Kõrgus:</string>
<string name="switchToFrontImage">Vaata esikülje pilti</string>
<string name="switchToBackImage">Vaata tagakülje pilti</string>
<string name="switchToBarcode">Vaata triipkoodi</string>
<string name="openFrontImageInGalleryApp">Ava esikülje pilt galeriirakenduses</string>
<string name="openBackImageInGalleryApp">Ava tagakülje pilt galeriirakenduses</string>
<string name="setBarcodeHeight">Määra triipkoodi kõrgus</string>
<string name="donate">Toeta rahaliselt</string>
<string name="icon_header_click_text">Pisipildi muutmiseks vajuta pikalt</string>
<string name="show_name_below_image_thumbnail">Näita pisipildi all nime</string>
<string name="show_note">Näita märkust</string>
<string name="show_validity">Näita kehtivust</string>
<string name="noCameraFoundGuideText">Sinu nutiseadmed ei tundu olema kaamerat. Kui ta siiski on olemas, siis esmalt proovi, kas taaskäivitamine aitab. Lisaks võid nupust „Veel“ leida muid valikuid triipkoodi lisamiseks.</string>
<string name="action_more_options">Lisavalikud</string>
<string name="importCancelled">Import on katkestatud</string>
<string name="settings_category_title_cards">Vahekaartide vaade</string>
<string name="settings_category_title_general">Üldised seadistused</string>
<string name="settings_category_title_privacy">Privaatsus</string>
<string name="action_display_options">Ekraani valikud</string>
<string name="show_archived_cards">Näita arhiveeritud kaarte</string>
<string name="view_online">Vaata võrgus</string>
<string name="addWithoutBarcode">Lisa ilma triipkoodita kaart</string>
<string name="enter_card_id">Sisesta kaardil kuvatav tunnusnumber või -tekst</string>
<string name="card_id_must_not_be_empty">Kaardi tunnus ei tohi olla tühi</string>
<string name="add_a_card_in_a_different_way">Lisa kaart mõnel muul viisil</string>
<string name="field_must_not_be_empty">Väli ei tohi olla tühi</string>
<string name="manually_enter_barcode_instructions">Sisesta sinu kaardil kuvatav tunnusnumber või -tekst ja klõpsi triipkoodi, millelaadset kuvatakse kaardil.</string>
<string name="add_manually_warning_title">Soovitame, et skaneerid triipkoodi</string>
<string name="add_manually_warning_message">Mõnede poodide ja äride puhul triipkoodi väärtus erineb kaardile kirjutatud numbrist. Seetõttu ei pruugi triipkoodi käsitsi lisamine alati toimida. Me tungivalt soovitame, et pigem skaneerid triipkoodi kaameraga. Kas sa siiski soovid jätkata?</string>
<string name="continue_">Jätka</string>
<string name="spend">Kuluta</string>
<string name="receive">Võta vastu</string>
<string name="amountParsingFailed">Vigane summa</string>
<string name="addFromPdfFile">Vali PDF-fail</string>
<string name="errorReadingFile">Faili lugemine ei õnnestunud</string>
<string name="failedLaunchingFileManager">Ei õnnestunud leida toetatud failihaldurit</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Missugust leitud triipkoodidest soovid kasutada?</string>
<string name="pageWithNumber"><xliff:g>%d</xliff:g>. leht</string>
<string name="exportCancelled">Eksport on tühistatud</string>
<string name="useFrontImage">Kasuta esikülje pilti</string>
<string name="useBackImage">Kasuta tagakülje pilti</string>
<string name="settings_use_volume_keys_navigation">Vaheta kaarte helivaljuse nuppudega</string>
<string name="settings_use_volume_keys_navigation_summary">Vaheta kuvatavaid vahekaarte helivaljuse nuppudega</string>
</resources>

View File

@@ -1,75 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">کاتیما</string>
<string name="action_search">جستجو</string>
<string name="action_add">افزودن</string>
<string name="noGiftCards">برای افزودن کارت دکمه + پلاس را بزنید, یا از ⋮ منو ایمپورت کنید.</string>
<string name="noGiftCardsGroup">تعدادی کارت ایجاد کنید، و سپس آنها را اینجا به گروه بیافزایید.</string>
<string name="noMatchingGiftCards">بدون نتیجه. سعی کنید جستجویتان را تغییر دهید.</string>
<string name="storeName">نام</string>
<string name="note">یادداشت</string>
<string name="cardId">شناسۀ کارت</string>
<string name="barcodeType">نوع بارکد</string>
<string name="noBarcode">بدون بارکد</string>
<string name="star">افزودن به علاقمندی‌ها</string>
<string name="unstar">حذف از علاقمندی‌ها</string>
<string name="cancel">لغو</string>
<string name="save">ذخیره</string>
<string name="edit">ویرایش</string>
<string name="delete">حذف</string>
<string name="confirm">تایید</string>
<string name="deleteTitle">حذف کارت</string>
<plurals name="deleteCardsTitle">
<item quantity="one">حذف <xliff:g>%d</xliff:g> کارت</item>
<item quantity="other">حذف <xliff:g>%d</xliff:g> کارت(ها)</item>
</plurals>
<string name="deleteConfirmation">این کارت برای همیشه حذف شود؟</string>
<string name="ok">تایید</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">این <xliff:g>%d</xliff:g> کارت برای همیشه حذف شود؟</item>
<item quantity="other">این <xliff:g>%d</xliff:g> کارت برای همیشه حذف شوند؟</item>
</plurals>
<string name="share">همرسانی</string>
<string name="sendLabel">ارسال…</string>
<string name="editCardTitle">ویرایش کارت</string>
<string name="addCardTitle">افزودن کارت</string>
<string name="scanCardBarcode">اسکن بارکد</string>
<string name="cardShortcut">میان‌بر کارت</string>
<string name="noCardsMessage">ابتدا یک کارت بیافزایید</string>
<string name="noCardExistsError">کارت پیدا نشد</string>
<string name="importFailedTitle">ایمپورت ناموفق بود</string>
<string name="importFailed">نمیتوان ایمپورت کرد</string>
<string name="exportSuccessfulTitle">خروجی گرفته شده</string>
<string name="exportFailedTitle">خروجی گرفتن ناموفق بود</string>
<string name="storageReadPermissionRequired">دسترسی به خواندن محل ذخیره برای این کار نیاز است…</string>
<string name="exportOptionExplanation">داده در محلی که شما انتخاب میکنید نوشته خواهد شد.</string>
<string name="receive">دریافت</string>
<string name="continue_">ادامه</string>
<string name="add_manually_warning_title">اسکن‌کردن توصیه میشود</string>
<string name="field_must_not_be_empty">فیلد نباید خالی باشد</string>
<string name="card_id_must_not_be_empty">شناسۀ کارت نباید خالی باشد</string>
<string name="action_more_options">گزینه‌های بیشتر</string>
<string name="addWithoutBarcode">افزودن کارت بدون بارکد</string>
<string name="enter_card_id">شناسۀ عددی یا متن روی کارت خود را وارد کنید</string>
<string name="view_online">مشاهدۀ آنلاین</string>
<string name="show_archived_cards">مشاهده کارت‌های بایگانی شده</string>
<string name="action_display_options">تنظیمات نمایش</string>
<string name="amountParsingFailed">مقدار نامعتبر</string>
<string name="exportCancelled">خروجی گیری لغو شد</string>
<string name="addFromPdfFile">یک فایل PDF انتخاب کنید</string>
<string name="exportName">خروجی گرفتن</string>
<string name="importExportHelp">پشتیبان‌گیری داده هایتان اجازه میدهد آنها را به دستگاه دیگری منتقل کنید.</string>
<string name="importSuccessfulTitle">ایمپورت شده</string>
<string name="exportFailed">نمیتوان خروجی گرفت</string>
<string name="importing">درحال ایمپورت…</string>
<string name="exporting">درحال خروجی گیری…</string>
<string name="cameraPermissionRequired">دسترسی به دوربین برای این کار نیاز است…</string>
<string name="permissionReadCardsLabel">خواندن کارتهای کاتیما</string>
<string name="permissionReadCardsDescription">کارت های کاتیما و تمام جزئیاتشان از جمله یادداشت‌ها و عکس‌ها را بخوانید</string>
<string name="cameraPermissionDeniedTitle">نمیتوان به دوربین دسترسی پیدا کرد</string>
<string name="noCameraPermissionDirectToSystemSetting">برای اسکن بارکد ها، کاتیما نیاز دارد به دوربین شما دسترسی داشته باشد. اینجا بزنید تا تنظیمات دسترسی خود را تغییر دهید.</string>
<string name="importExport">ایمپورت/خروجی گرفتن</string>
<string name="settings_category_title_privacy">حریم شخصی</string>
<string name="settings_category_title_general">عمومی</string>
<string name="settings_category_title_cards">کارت‌ها</string>
</resources>

View File

@@ -23,6 +23,9 @@
\nLuo se Catima-sovelluksen Tuo/vie-valikosta painamalla siellä ensin Vie.</string>
<string name="importCatima">Tuo Catima varmuuskopiotiedostosta</string>
<string name="accept">Hyväksy</string>
<string name="privacy_policy_popup_text">Tietosuojaseloste (joidenkin sovelluskauppojen vaatimus):
\n
\nMITÄÄN TIETOJA EI KERÄTÄ LAINKAAN, minkä kuka tahansa voi vahvistaa, koska sovelluksemma on vapaa ohjelmisto.</string>
<string name="privacy_policy">Tietosuojakäytäntö</string>
<string name="app_loyalty_card_keychain">Kanta-asiakaskortin avainnippu</string>
<string name="chooseImportType">Tuo tietoja kohteesta</string>
@@ -62,7 +65,7 @@
<string name="intent_import_card_from_url_share_text">Haluan jakaa kortin kanssasi</string>
<string name="settings_disable_lockscreen_while_viewing_card">Estä näytön lukitus</string>
<string name="settings_keep_screen_on">Pidä näyttö päällä</string>
<string name="settings_display_barcode_max_brightness">Kirkasta näyttöä</string>
<string name="settings_display_barcode_max_brightness">Kirkasta viivakoodinäkymää</string>
<string name="settings_dark_theme">Tumma</string>
<string name="settings_light_theme">Vaalea</string>
<string name="settings_system_theme">Järjestelmän oletus</string>
@@ -152,8 +155,8 @@
<string name="failedGeneratingShareURL">Jaettavaa URL-osoitetta ei voitu luoda. Ilmoita tästä.</string>
<string name="turn_flashlight_on">Käytä taskulamppua</string>
<string name="turn_flashlight_off">Sammuta salamavalo</string>
<string name="app_contributors">Mahdollistanut: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="settings_brown_theme">Ruskea</string>
<string name="settings_grey_theme">Harmaa</string>
<string name="settings_green_theme">Vihreä</string>
<string name="settings_sky_blue_theme">Taivaansininen</string>
<string name="settings_blue_theme">Siniset</string>
@@ -210,7 +213,7 @@
<string name="unarchive">Poista arkistosta</string>
<string name="archived">Kortti arkistoitu</string>
<string name="failedLaunchingPhotoPicker">Tuettua galleriasovellusta ei löytynyt</string>
<string name="settings_card_orientation">Näytön suunta</string>
<string name="settings_card_orientation">Viivakoodin suuntaus</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> kortti (<xliff:g id="archivedCount">%2$d</xliff:g> arkistoitu)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> korttia (<xliff:g id="archivedCount">%2$d</xliff:g> arkistoitu)</item>
@@ -220,7 +223,11 @@
<string name="nextCard">Seuraava</string>
<string name="failedToOpenUrl">Asenna ensin verkkoselain</string>
<string name="welcome">Tervetuloa Catimaan</string>
<string name="updateBalanceTitle">Kuinka paljon kulutit tai tienasit?</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Näytä arkisto (<xliff:g>%1$d</xliff:g> kortti)</item>
<item quantity="other">Näytä arkisto (<xliff:g>%1$d</xliff:g> korttia)</item>
</plurals>
<string name="updateBalanceTitle">Kuinka paljon kulutit\?</string>
<string name="updateBalanceHint">Syötä summa</string>
<string name="barcodeLongPressMessage">Vain kuvia on mahdollista avata galleriasovelluksessa</string>
<string name="archive">Arkistoi</string>
@@ -260,7 +267,7 @@
<string name="show_note">Näytä huomautus</string>
<string name="show_balance">Näytä saldo</string>
<string name="show_validity">Näytä kelpoisuus</string>
<string name="settings_category_title_cards">Korttinäkymä</string>
<string name="settings_category_title_cards">Kortit</string>
<string name="settings_category_title_general">Yleiset</string>
<string name="action_display_options">Näyttövalinnat</string>
<string name="app_copyright_short">Tekijänoikeus © Sylvia van Os ja avustajat</string>
@@ -273,25 +280,4 @@
<string name="field_must_not_be_empty">Kenttä ei saa olla tyhjä</string>
<string name="manually_enter_barcode_instructions">Syötä kortissa näkyvä numero tai teksti ja klikkaa viivakoodia, joka vastaa kortissa olevaa koodia.</string>
<string name="app_name">Catima</string>
<string name="balanceParsingFailed">Virheellinen saldo</string>
<string name="view_online">Näytä verkossa</string>
<string name="settings_follow_sensor_orientation">Kierrä aina (ohittaa järjestelmän asetukset)</string>
<string name="continue_">Jatka</string>
<string name="add_manually_warning_title">Skannausta suositellaan</string>
<string name="spend">Kuluta</string>
<string name="receive">Vastaanota</string>
<string name="amountParsingFailed">Virheellinen määrä</string>
<string name="add_manually_warning_message">Joidenkin kauppojen kohdalla viivakoodin arvo eroaa kortilla olevasta numerosta. Tämän takia viivakoodin syöttäminen käsin ei aina toimi. On vahvasti suositeltua skannata viivakoodi kameralla. Haluatko silti jatkaa?</string>
<string name="addFromPdfFile">Valitse PDF-tiedosto</string>
<string name="errorReadingFile">Tiedostoa ei voitu lukea</string>
<string name="failedLaunchingFileManager">Tuettua tiedostonhallintasovellusta ei löytynyt</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Mitä löytyneistä viivakoodeista haluat käyttää?</string>
<string name="pageWithNumber">Sivu <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Laitteessasi ei näytä olevan kameraa. Jos näin käy, yritä käynnistää laite uudelleen. Muussa tapauksessa käytä alla olevaa Lisää vaihtoehtoja -painiketta lisätäksesi viivakoodin toisella tavalla.</string>
<string name="importCancelled">Tuonti peruttu</string>
<string name="exportCancelled">Vienti peruttu</string>
<string name="useBackImage">Käytä takakuvaa</string>
<string name="useFrontImage">Käytä etukuvaa</string>
<string name="settings_use_volume_keys_navigation">Vaihtele korttien välillä äänenvoimakkuuspainikkeilla</string>
<string name="settings_use_volume_keys_navigation_summary">Käytä äänenvoimakkuuspainikkeita vaihtaaksesi näytettävän kortin</string>
</resources>

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_search">Hanap</string>
<string name="app_name">Catima</string>
</resources>

View File

@@ -42,7 +42,7 @@
<string name="selectBarcodeTitle">Choisissez le code-barres</string>
<string name="thumbnailDescription">Miniature</string>
<string name="settings">Paramètres</string>
<string name="settings_display_barcode_max_brightness">Augmenter la luminosité</string>
<string name="settings_display_barcode_max_brightness">Augmenter la luminosité du code-barres</string>
<string name="exportSuccessful">Données exportées</string>
<string name="importSuccessful">Données importées</string>
<string name="intent_import_card_from_url_share_text">Je veux partager une carte avec toi</string>
@@ -80,6 +80,9 @@
</plurals>
<string name="groupsList">Groupes : <xliff:g>%s</xliff:g></string>
<string name="accept">Accepter</string>
<string name="privacy_policy_popup_text">Avis sur la politique de confidentialité (exigé par certains magasins dapplications) :
\n
\nAUCUNE DONNÉE NEST COLLECTÉE, ce que tout le monde peut confirmer puisque notre application est un logiciel libre.</string>
<string name="privacy_policy">Politique de confidentialité</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="chooseImportType">Importer les données depuis</string>
@@ -92,9 +95,9 @@
<string name="expiryDate">Date dexpiration</string>
<string name="editBarcode">Modifier le code-barres</string>
<string name="card">Carte</string>
<string name="balanceSentence">Solde: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Expiré le: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Expire le: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Solde : <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Expiré : <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g></string>
<string name="expiryStateSentence">Expire : <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g></string>
<string name="settings_disable_lockscreen_while_viewing_card">Empêcher le verrouillage de lécran</string>
<string name="settings_keep_screen_on">Garder lécran allumé</string>
<string name="importVoucherVaultMessage">Sélectionnez votre exportation <i>vouchervault.json</i> de Voucher Vault à importer.
@@ -158,6 +161,7 @@
<string name="settings_system_locale">Système</string>
<string name="settings_locale">Langue</string>
<string name="settings_brown_theme">Marron</string>
<string name="settings_grey_theme">Gris</string>
<string name="settings_green_theme">Vert</string>
<string name="settings_sky_blue_theme">Bleu ciel</string>
<string name="settings_blue_theme">Bleu</string>
@@ -166,7 +170,6 @@
<string name="settings_pink_theme">Rose</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_theme_color">Couleur du thème</string>
<string name="app_contributors">Rendu possible par : <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="noGroupCards">Ce groupe est vide</string>
<string name="barcodeImageDescriptionWithType">Image <xliff:g>%s</xliff:g> code-barres</string>
<string name="sort">Trier</string>
@@ -207,7 +210,7 @@
</plurals>
<string name="settings_oled_dark">Fond noir pour le thème sombre</string>
<string name="include_if_asking_support">Si vous voulez demander de l\'aide, incluez les informations suivantes :</string>
<string name="settings_card_orientation">Orientation de l\'écran</string>
<string name="settings_card_orientation">Orientation du code-barres</string>
<string name="settings_follow_system_orientation">Suivre le système</string>
<string name="settings_portrait_orientation">Portrait</string>
<string name="settings_landscape_orientation">Paysage</string>
@@ -226,6 +229,11 @@
<string name="nextCard">Suivant</string>
<string name="previousCard">Précédent</string>
<string name="failedToOpenUrl">Installez d\'abord un navigateur web</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Voir les archives (<xliff:g>%1$d</xliff:g> carte)</item>
<item quantity="many">Voir les archives (<xliff:g>%1$d</xliff:g> cartes)</item>
<item quantity="other">Voir les archives (<xliff:g>%1$d</xliff:g> cartes)</item>
</plurals>
<string name="welcome">Bienvenue dans Catima</string>
<string name="barcodeLongPressMessage">Seules les images peuvent être ouvertes dans lapplication galerie</string>
<string name="failedToRetrieveImageFile">Impossible de récupérer le fichier image</string>
@@ -234,7 +242,7 @@
<string name="cameraPermissionDeniedTitle">Impossible daccéder à la caméra</string>
<string name="noCameraPermissionDirectToSystemSetting">Pour scanner les codes-barres, Catima doit avoir accès à votre caméra. Tapez ici pour modifier vos paramètres d\'autorisation.</string>
<string name="updateBalance">Mettre à jour le solde</string>
<string name="updateBalanceTitle">Combien avez-vous dépensé ou reçu?</string>
<string name="updateBalanceTitle">Combien avez-vous dépensé \?</string>
<string name="newBalanceSentence">Nouveau solde : <xliff:g>%s</xliff:g></string>
<string name="importCards">Importer des cartes</string>
<string name="storageReadPermissionRequired">Lautorisation de lire le stockage est nécessaire pour cette action…</string>
@@ -263,7 +271,7 @@
<string name="settings_display_barcode_max_brightness_summary">Nécessaire au fonctionnement de certains scanneurs</string>
<string name="settings_keep_screen_on_summary">Désactive la temporisation de l\'écran lors de la visualisation d\'une carte</string>
<string name="settings_oled_dark_summary">Réduit l\'utilisation de la batterie sur les écrans OLED</string>
<string name="settings_category_title_cards">Vue carte</string>
<string name="settings_category_title_cards">Cartes</string>
<string name="settings_category_title_general">Généraux</string>
<string name="settings_category_title_privacy">Confidentialité</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Désactive le verrouillage de l\'écran pendant la visualisation d\'une carte</string>
@@ -281,23 +289,4 @@
<string name="addWithoutBarcode">Ajouter une carte sans code-barres</string>
<string name="field_must_not_be_empty">Le champ ne peut pas être vide</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Toujours pivoter (ignore les paramètres du système)</string>
<string name="add_manually_warning_title">Scan recommandé</string>
<string name="continue_">Continuer</string>
<string name="add_manually_warning_message">Pour certains magasins, la valeur du code-barres diffère du numéro inscrit sur la carte. Pour cette raison, la saisie manuelle dun code-barres peut ne pas toujours fonctionner. Il est fortement recommandé de scanner le code-barres avec votre appareil photo. Voulez-vous toujours continuer?</string>
<string name="spend">Dépenser</string>
<string name="receive">Reçevoir</string>
<string name="amountParsingFailed">Montant Invalide</string>
<string name="addFromPdfFile">Sélectionner un fichier PDF</string>
<string name="errorReadingFile">Lecture du fichier impossible</string>
<string name="failedLaunchingFileManager">Impossible de trouver un gestionnaire de fichiers supporté</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Quel code-barre, parmi ceux trouvés, voulez-vous utiliser?</string>
<string name="pageWithNumber">Page <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Votre appareil ne semble pas disposer d\'une caméra. Si c\'est le cas, veuillez essayer de redémarrer l\'appareil. Sinon, vous pouvez utiliser le bouton \"Plus d\'options\" ci-dessous pour ajouter un code-barre d\'une autre manière.</string>
<string name="exportCancelled">Exportation annulée</string>
<string name="importCancelled">Importation annulée</string>
<string name="useFrontImage">Utiliser l\'image de face</string>
<string name="useBackImage">Utiliser l\'image arrière</string>
<string name="settings_use_volume_keys_navigation">Changer de cartes avec les boutons de volume</string>
<string name="settings_use_volume_keys_navigation_summary">Utilisez les boutons de volume pour changer la carte affichée</string>
</resources>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="action_add">הוספה</string>
<string name="cardId">מזהה כרטיס</string>
<string name="cancel">ביטול</string>
@@ -61,12 +61,4 @@
<item quantity="many">מעט</item>
<item quantity="other">אחר</item>
</plurals>
<string name="importCancelled">ייבוא בוטל</string>
<string name="exportCancelled">ייצוא בוטל</string>
<string name="addFromPdfFile">בחר קובץ PDF</string>
<string name="errorReadingFile">לא ניתן לקרוא את הקובץ</string>
<string name="failedLaunchingFileManager">לא נמצא קובץ ניהול נתמך</string>
<string name="multipleBarcodesFoundPleaseChooseOne">באיזה מהברקודים שנמצאו אתה רוצה להשתמש?</string>
<string name="useFrontImage">השתמש בתמונה קדמית</string>
<string name="useBackImage">השתמש בתמונה אחורית</string>
</resources>

View File

@@ -70,7 +70,7 @@
<string name="noBarcode">बारकोड नहीं है</string>
<string name="scanCardBarcode">बारकोड स्कैन करें</string>
<string name="cardShortcut">कार्ड का सरल उपाय (शॉर्टकट)</string>
<string name="noGiftCards">कार्ड जोड़ने के लिए + प्लस बटन पर क्लिक करें, या ⋮ मेनू से आयात करें</string>
<string name="noGiftCards">\"+\" बटन दबाके कार्ड जोड़ें वा मेन्यू से कार्ड आयात करें</string>
<string name="importExportHelp">तथ्य (डाटा) को बैकअप करना हमें उसे दूसरे डिवाइस में भेजने देता है।</string>
<string name="barcodeImageDescriptionWithType"><xliff:g>%s</xliff:g> का बारकोड</string>
<string name="settings_disable_lockscreen_while_viewing_card">स्क्रीन को लॉक होने से रोकें</string>
@@ -107,14 +107,17 @@
<string name="exportSuccessful">डेटा निर्यात किया गया</string>
<string name="groupsList">समूह: <xliff:g>%s</xliff:g></string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> बिंदु</item>
<item quantity="one"><xliff:g>%s</xliff:g> अंक</item>
<item quantity="other"><xliff:g>%s</xliff:g> अंक</item>
</plurals>
<string name="privacy_policy_popup_text">निजता नीति नोटिस (कुछ ऐप स्टोर के लिए आवश्यक):
\n
\nकोई भी डेटा एकत्र नहीं किया जाता है, जिसकी पुष्टि कोई भी कर सकता है क्योंकि हमारा ऐप मुफ्त सॉफ्टवेयर है।</string>
<string name="importCatimaMessage">आयात करने के लिए, <i>catima.zip</i> फाइल को चुने जो की Catima से निर्यात किया गया था.
\nदूसरे Catima ऍप के आयात/निर्यात मेनू से निर्यात बटन दबाकर, पहले catima.zip फाइल को बनाये.</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> चयनित</item>
<item quantity="other"><xliff:g>%d</xliff:g> चयनित</item>
<item quantity="other"><xliff:g>%d</xliff:g> चयनित.</item>
</plurals>
<string name="groups">समूहों</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">कॉपीराइट © 2019<xliff:g>%d</xliff:g> Sylvia van Os और योगदाता</string>
@@ -197,6 +200,7 @@
<string name="options">विकल्प</string>
<string name="settings_magenta_theme">मैजेंटा</string>
<string name="failedGeneratingShareURL">साझा करने योग्य यूआरएल जैनरेट नहीं किया जा सकता. कृपया इसकी रिपोर्ट करें।</string>
<string name="settings_grey_theme">स्लेटी</string>
<string name="sort_by_most_recently_used">सबसे हाल ही में उपयोग किया गया</string>
<string name="settings_theme_color">थीम रंग</string>
<string name="settings_sky_blue_theme">आसमानी नीला</string>
@@ -210,86 +214,4 @@
<string name="show_balance">मात्रा दिखाओ</string>
<string name="nextCard">अगला</string>
<string name="rate_this_app">इस ऐप को रेट करें</string>
<string name="settings_system_locale">सिस्टम</string>
<string name="setIcon">थंबनेल सेट करें</string>
<string name="sort_by_expiry">समाप्ति</string>
<string name="sort_by">इसके अनुसार क्रमबद्ध करें</string>
<string name="importCards">कार्ड आयात करें</string>
<string name="add_a_card_in_a_different_way">कार्ड को भिन्न तरीके से जोड़ें</string>
<string name="settings_locale">भाषा</string>
<string name="settings_oled_dark">गहरे रंग की थीम के लिए शुद्ध काले रंग की पृष्ठभूमि</string>
<string name="selectColor">रंग चुनो</string>
<string name="app_contributors">इसके द्वारा संभव बनाया गया: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="sort">क्रमबद्ध करें</string>
<string name="show_note">नोट दिखाएँ</string>
<string name="settings_follow_sensor_orientation">हमेशा घुमाएँ (सिस्टम सेटिंग्स को अनदेखा करता है)</string>
<string name="importFidmeMessage">आयात करने के लिए FidMe से अपना <i>fidme-export-request-xxxxxx.zip</i> निर्यात चुनें, और बाद में मैन्युअल रूप से बारकोड प्रकार चुनें।
\nडेटा सुरक्षा चुनकर और फिर पहले मेरा डेटा निकालें दबाकर इसे अपनी FidMe प्रोफ़ाइल से बनाएं।</string>
<string name="importLoyaltyCardKeychainMessage">आयात करने के लिए लॉयल्टी कार्ड कीचेन से अपना <i>LoyaltyCardKeychen.csv</i> निर्यात चुनें।
\nपहले वहां एक्सपोर्ट दबाकर लॉयल्टी कार्ड कीचेन में आयात/निर्यात मेनू से इसे बनाएं।</string>
<string name="updateBarcodeQuestionText">आपने आईडी बदल दी. क्या आप समान मान का उपयोग करने के लिए बारकोड को भी अपडेट करना चाहते हैं?</string>
<string name="exportPassword">अपने निर्यात की सुरक्षा के लिए एक पासवर्ड सेट करें (वैकल्पिक)</string>
<string name="turn_flashlight_off">टॉर्च बंद करें</string>
<string name="settings_oled_dark_summary">OLED डिस्प्ले पर बैटरी का उपयोग कम होता है</string>
<string name="showMoreInfo">जानकारी दिखाएँ</string>
<string name="updateBalance">शेष राशि अद्यतन करें</string>
<string name="failedToRetrieveImageFile">छवि फ़ाइल पुनः प्राप्त करने में विफल</string>
<string name="version_history">संस्करण इतिहास</string>
<string name="archive">पुरालेख</string>
<string name="archived">कार्ड संग्रहीत</string>
<string name="barcodeLongPressMessage">गैलरी ऐप में केवल छवियां ही खोली जा सकती हैं</string>
<string name="license">परवाना</string>
<string name="source_repository">स्रोत रिपोजिटरी</string>
<string name="include_if_asking_support">यदि आप सहायता का अनुरोध करना चाहते हैं, तो निम्नलिखित जानकारी शामिल करें:</string>
<string name="starred">तारांकित</string>
<string name="unarchived">कार्ड अनारक्षित</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> कार्ड (<xliff:g id="archivedCount">%2$d</xliff:g> संग्रहीत)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> कार्ड (<xliff:g id="archivedCount">%2$d</xliff:g> संग्रहीत)</item>
</plurals>
<string name="updateBalanceTitle">आपने कितना खर्च या प्राप्त किया?</string>
<string name="chooseValidFromDate">दिनांक से वैध चुनें</string>
<string name="show_name_below_image_thumbnail">छवि थंबनेल के नीचे नाम दिखाएँ</string>
<string name="show_archived_cards">संग्रहीत कार्ड दिखाएँ</string>
<string name="manually_enter_barcode_instructions">अपने कार्ड पर आईडी नंबर या टेक्स्ट दर्ज करें और अपने कार्ड पर मौजूद बारकोड की तरह दिखने वाले बारकोड को दबाएं।</string>
<string name="welcome">कैटिमा में आपका स्वागत है</string>
<string name="previousCard">पिछला</string>
<string name="failedLaunchingPhotoPicker">कोई समर्थित गैलरी ऐप नहीं मिल सका</string>
<string name="reverse">...उल्टे क्रम में</string>
<string name="height">ऊंचाई:</string>
<string name="importVoucherVaultMessage">आयात करने के लिए वाउचर वॉल्ट से अपना <i>vouchervault.json</i> निर्यात चुनें।
\nसबसे पहले वाउचर वॉल्ट में एक्सपोर्ट दबाकर इसे बनाएं।</string>
<string name="turn_flashlight_on">टॉर्च चालू करें</string>
<string name="sort_by_name">नाम</string>
<string name="credits">श्रेय</string>
<string name="unarchive">असंग्रहित</string>
<string name="failedToOpenUrl">सबसे पहले एक वेब ब्राउज़र इंस्टॉल करें</string>
<string name="currentBalanceSentence">वर्तमान शेष: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">नया शेष: <xliff:g>%s</xliff:g></string>
<string name="validFromDate">से मान्य</string>
<string name="validFromSentence">यहां से मान्य: <xliff:g>%s</xliff:g></string>
<string name="switchToFrontImage">सामने वाली छवि पर स्विच करें</string>
<string name="switchToBackImage">पिछली छवि पर स्विच करें</string>
<string name="switchToBarcode">बारकोड पर स्विच करें</string>
<string name="openFrontImageInGalleryApp">गैलरी ऐप में सामने वाली छवि खोलें</string>
<string name="openBackImageInGalleryApp">गैलरी ऐप में पिछली छवि खोलें</string>
<string name="setBarcodeHeight">बारकोड ऊंचाई सेट करें</string>
<string name="icon_header_click_text">थंबनेल संपादित करने के लिए देर तक दबाएँ</string>
<string name="enter_card_id">अपने कार्ड पर आईडी नंबर या पाठ दर्ज करें</string>
<string name="continue_">जारी रखें</string>
<string name="add_manually_warning_message">कुछ दुकानों के लिए, बारकोड का मान कार्ड पर लिखे नंबर से भिन्न होता है। इस वजह से, बारकोड को मैन्युअल रूप से दर्ज करना हमेशा काम नहीं कर सकता है। इसके बजाय बारकोड को अपने कैमरे से स्कैन करने की पुरजोर अनुशंसा की जाती है। क्या आप अब भी जारी रखना चाहते हैं?</string>
<string name="add_manually_warning_title">स्कैनिंग की अनुशंसा की जाती है</string>
<string name="spend">खर्च किया</string>
<string name="receive">प्राप्त किया</string>
<string name="amountParsingFailed">अमान्य राशि</string>
<string name="multipleBarcodesFoundPleaseChooseOne">आप पाए गए बारकोड में से कौन सा उपयोग करना चाहते हैं?</string>
<string name="pageWithNumber">पृष्ठ <xliff:g>%d</xliff:g></string>
<string name="addFromPdfFile">एक PDF फाइल चुनें</string>
<string name="errorReadingFile">फाइल को पढ़ा नहीं जा सका</string>
<string name="failedLaunchingFileManager">समर्थित फाइल प्रबंधक नहीं मिल सका</string>
<string name="noCameraFoundGuideText">ऐसा लगता है कि आपके डिवाइस में कैमरा नहीं है। अगर है, तो डिवाइस को रीबूट करने का प्रयास करें। अन्यथा, किसी अन्य तरीके से बारकोड जोड़ने के लिए नीचे दिए गए अधिक विकल्प बटन का उपयोग करें।</string>
<string name="importCancelled">आयात रद्द</string>
<string name="exportCancelled">निर्यात रद्द</string>
<string name="useFrontImage">सामने की छवि का प्रयोग करें</string>
<string name="useBackImage">पीछे की छवि का उपयोग करें</string>
</resources>

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="unstar">Ukloni iz favorita</string>
<string name="action_search">Traži</string>
<string name="action_search">Pretraži</string>
<string name="save">Spremi</string>
<string name="edit">Uredi</string>
<string name="delete">Ibriši</string>
<string name="delete">Ukloni</string>
<string name="confirm">Potvrdi</string>
<string name="deleteTitle">Izbriši karticu</string>
<string name="deleteConfirmation">Izbrisati ovu karticu zauvijek\?</string>
@@ -20,7 +20,7 @@
<string name="action_add">Dodaj</string>
<string name="storeName">Ime</string>
<string name="note">Bilješka</string>
<string name="noMatchingGiftCards">Nema rezultata. Pokušaj promijeniti tvoju pretragu.</string>
<string name="noMatchingGiftCards">Nema rezultata. Pokušajte promijeniti pretraživanje.</string>
<string name="cardId">ID kartice</string>
<string name="barcodeType">Vrsta crtičnog koda</string>
<string name="cancel">Odustani</string>
@@ -51,11 +51,11 @@
<string name="settings_theme">Tema</string>
<string name="settings_system_theme">Sustav</string>
<string name="settings_light_theme">Svijetla</string>
<string name="settings_display_barcode_max_brightness">Posvijetli prikaz crtičnog koda</string>
<string name="settings_display_barcode_max_brightness">Osvijetli prikaz crtičnog koda</string>
<string name="moveDown">Pomakni prema dolje</string>
<string name="addManually">Upiši crtični kod</string>
<string name="addManually">Upiši barkod</string>
<string name="thumbnailDescription">Sličica</string>
<string name="starImage">Zvijezda za favorite</string>
<string name="starImage">Omiljena zvijezda</string>
<string name="exportSuccessful">Podaci su izvezeni</string>
<string name="settings_keep_screen_on">Ostavi ekran uključen</string>
<string name="settings_disable_lockscreen_while_viewing_card">Spriječi zaključavanje ekrana</string>
@@ -89,56 +89,60 @@
<string name="importCatima">Uvezi iz Catima</string>
<string name="importFidme">Uvezi iz FidMe</string>
<string name="importStocard">Uvezi iz Stocard</string>
<string name="importLoyaltyCardKeychainMessage">Odaberi tvoju iz LoyaltyCardKeychain izvezenu <i>LoyaltyCardKeychain.csv</i> datoteku koju želiš uvesti.
\nStvori je putem izbornika „Uvoz/Izvoz” u aplikaciji Loyalty Card Keychain i tamo pritisni „Izvoz”.</string>
<string name="importLoyaltyCardKeychainMessage">Odaberi tvoju iz LoyaltyCardKeychain izvezenu <i>LoyaltyCardKeychain.csv</i> datoteku koju želiš uvesti.
\nStvori je putem izbornika „Uvoz/Izvoz” u aplikaciji LoyaltyCardKeychain i tamo najprije pritisni „Izvoz”.</string>
<string name="updateBarcodeQuestionText">Promijenio/la si ID. Želiš li također aktualizirati crtični kod da koristi istu vrijednost\?</string>
<string name="importCards">Uvezi kartice</string>
<string name="selectColor">Odaberi boju</string>
<string name="setIcon">Postavi sličicu</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_green_theme">Zelena</string>
<string name="settings_grey_theme">Siva</string>
<string name="sort_by_expiry">Istek</string>
<string name="barcodeImageDescriptionWithType">Slika vrste crtičnog koda <xliff:g>%s</xliff:g></string>
<string name="importLoyaltyCardKeychain">Uvezi iz Loyalty Card Keychain</string>
<string name="frontImageDescription">Prednja slika</string>
<string name="exportPasswordHint">Upiši lozinku</string>
<string name="turn_flashlight_on">Uključi bljeskalicu</string>
<string name="turn_flashlight_on">Uključi svjetiljku</string>
<string name="failedGeneratingShareURL">Nije bilo moguće generirati URL za dijeljenje. Prijavi ovaj problem.</string>
<string name="turn_flashlight_off">Isključi bljeskalicu</string>
<string name="turn_flashlight_off">Isključi svjetiljku</string>
<string name="settings_locale">Jezik</string>
<string name="settings_magenta_theme">Magenta</string>
<string name="settings_violet_theme">Ljubičasta</string>
<string name="settings_sky_blue_theme">Nebesko plava</string>
<string name="sort">Razvrstaj</string>
<string name="updateBalance">Aktualiziraj saldo</string>
<string name="sort_by">Razvrstaj po</string>
<string name="version_history">Povijest verzija</string>
<string name="sort_by">Redoslijed</string>
<string name="version_history">Kronologija verzija</string>
<string name="credits">Zasluge</string>
<string name="and_data_usage">i korištenje podataka</string>
<string name="rate_this_app">Ocijeni ovu aplikaciju</string>
<string name="report_error">Prijavi grešku</string>
<string name="include_if_asking_support">Ako želiš zatražiti podršku uključi sljedeće informacije:</string>
<string name="report_error">Prijavi greške</string>
<string name="include_if_asking_support">Ako želiš zatražiti podršku, uključi sljedeće informacije:</string>
<string name="options">Opcije</string>
<string name="starred">Favorit</string>
<string name="starred">Označeno</string>
<string name="duplicateCard">Dupliciraj</string>
<string name="archive">Arhiviraj</string>
<string name="archived">Kartica je arhivirana</string>
<string name="unarchived">Kartica je uklonjena iz arhive</string>
<string name="failedLaunchingPhotoPicker">Nije bilo moguće pronaći podržanu aplikaciju galerije</string>
<string name="unarchived">Kartica je dearhivirana</string>
<string name="failedLaunchingPhotoPicker">Nije bilo moguće pronaći aplikaciju za galeriju</string>
<string name="cameraPermissionDeniedTitle">Nije bilo moguće pristupiti kameri</string>
<string name="noCameraPermissionDirectToSystemSetting">Za snimanje crtičnih kodova Catima treba pristup tvojoj kameri. Dodirni ovdje za mijenjanje postavki dozvola.</string>
<string name="app_libraries">Slobodne biblioteke trećih strana: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="selectBarcodeTitle">Odaberi crtični kod</string>
<string name="app_libraries">Libre biblioteke trećih strana: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="selectBarcodeTitle">Biranje crtičnog koda</string>
<string name="settings_portrait_orientation">Okomito</string>
<string name="settings_lock_on_opening_orientation">Odredi orijentaciju koja se koristi prilikom otvaranja kartice</string>
<string name="settings_lock_on_opening_orientation">Zaključaj na položaj koji se koristi prilikom otvaranja kartice</string>
<string name="group_edit">Uredi grupu</string>
<string name="group_name_already_in_use">Ime grupe se već koristi</string>
<string name="noBarcodeFound">Nijedan crtični kod nije pronađen</string>
<string name="balance">Saldo</string>
<string name="chooseImportType">Uvezi podatke iz</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="app_loyalty_card_keychain">Privjesak za Karticu Vjernosti</string>
<string name="privacy_policy_popup_text">Obavijest o politici privatnosti (obavezna za neke trgovine aplikacija):
\n
\nPODACI SE UOPĆE NE PRIKUPLJAJU, što svatko može potvrditi budući da je naša aplikacija libre softver.</string>
<string name="importCatimaMessage">Odaberi tvoju iz Catima izvezenu <i>catima.zip</i> datoteku koju želiš uvesti.
\nStvori je putem izbornika „Uvoz/Izvoz” jedne druge Catima aplikacije pritiskom na „Izvoz”.</string>
\nStvori je putem izbornika „Uvoz/Izvoz” jedne druge Catima aplikacije i tamo najprije pritisni „Izvoz”.</string>
<string name="height">Visina:</string>
<string name="switchToFrontImage">Prebaci na prednju sliku</string>
<string name="switchToBackImage">Prebaci na stražnju sliku</string>
@@ -149,7 +153,7 @@
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> odabrana</item>
<item quantity="few"><xliff:g>%d</xliff:g> odabrane</item>
<item quantity="other"><xliff:g>%d</xliff:g> odabranih</item>
<item quantity="other"><xliff:g>%d</xliff:g> odabrano</item>
</plurals>
<string name="validFromDate">Vrijedi od</string>
<string name="chooseValidFromDate">Odaberi datum od kada kartica vrijedi</string>
@@ -157,7 +161,7 @@
<string name="validFromSentence">Vrijedi od: <xliff:g>%s</xliff:g></string>
<string name="photos">Slike</string>
<string name="ok">U redu</string>
<string name="app_copyright_old">Bazira na aplikaciji Loyalty Card Keychain
<string name="app_copyright_old">Zasnovano na Loyalty Card Keychain
\nautorsko pravo © 2016. 2020. Branden Archer</string>
<string name="settings_system_locale">Sustav</string>
<plurals name="balancePoints">
@@ -169,13 +173,13 @@
<string name="storageReadPermissionRequired">Za ovu radnju je potrebna dozvola za čitanje spremljenih podataka …</string>
<string name="cameraPermissionRequired">Za ovu radnju je potrebna dozvola za pristup kameri …</string>
<string name="app_license">Copylefted libre softver, GPLv3+ licenca</string>
<string name="settings_card_orientation">Orijentacija crtičnog koda</string>
<string name="settings_card_orientation">Položaj crtičnog koda</string>
<string name="settings_follow_system_orientation">Slijedi sustav</string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="importFidmeMessage">Odaberi tvoju iz FidMe izvezenu <i>idme-export-request-xxxxxx.zip</i> datoteku koju želiš uvesti i ručno odaberi vste crtičnog koda nakon toga.
\nStvori je putem tvog FidMe profila biranjem „Zaštita podataka” a zatim pritisni „Dekomprimiraj moje podatke”.</string>
<string name="importVoucherVaultMessage">Odaberi tvoju iz Voucher Vault izvezenu <i>vouchervault.json</i> datoteku koju želiš uvesti.
\nStvori je u aplikaciji Voucher Vault i tamo pritisni „Izvoz”.</string>
<string name="importFidmeMessage">Odaberi tvoju iz FidMe izvezenu <i>idme-export-request-xxxxxx.zip</i> datoteku koju želiš uvesti i ručno odaberi vste crtičnog koda nakon toga.
\nStvori je putem tvog FidMe profila i tamo najprije odaberi „Zaštita podataka” a zatim pritisni „Dekomprimiraj moje podatke”.</string>
<string name="importVoucherVaultMessage">Odaberi tvoju iz Voucher Vault izvezenu <i>vouchervault.json</i> datoteku koju želiš uvesti.
\nStvori je u aplikaciji Voucher Vault i tamo najprije pritisni „Izvoz”.</string>
<string name="settings_pink_theme">Ružičasta</string>
<string name="settings_blue_theme">Plava</string>
<string name="failedToRetrieveImageFile">Neuspjelo dohvaćanje slikovne datoteke</string>
@@ -184,11 +188,11 @@
<string name="source_repository">Izvorni repozitorij</string>
<string name="on_github">na GitHubu</string>
<string name="on_google_play">na stranici Google Play</string>
<string name="unarchive">Ukloni iz arhive</string>
<string name="unarchive">Dearhiviraj</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> je arhivirana)</item>
<item quantity="few"><xliff:g>%1$d</xliff:g> kartice (<xliff:g id="archivedCount">%2$d</xliff:g> su arhivirane)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> je arhivirano)</item>
<item quantity="one"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirana)</item>
<item quantity="few"><xliff:g>%1$d</xliff:g> kartice (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirane)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirano)</item>
</plurals>
<string name="help_translate_this_app">Pomogni prevoditi ovu aplikaciju</string>
<string name="welcome">Pozdrav u Catima</string>
@@ -206,14 +210,14 @@
</plurals>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Autorska prava © 2019. <xliff:g>%d.</xliff:g> Sylvia van Os i doprinositelji</string>
<string name="debug_version_fmt">Verzija: <xliff:g id="version">%s</xliff:g></string>
<string name="app_resources">Slobodni resursi trećih strana: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_resources">Libre resursi trećih strana: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="settings_landscape_orientation">Vodoravno</string>
<string name="group_name_is_empty">Ime grupe ne smije biti prazno</string>
<string name="group_updated">Grupa je aktualizirana</string>
<string name="all">Sve</string>
<string name="groupsList">Grupe: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Isteče: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Istekla: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Isteklo: <xliff:g>%s</xliff:g></string>
<string name="chooseExpiryDate">Odaberi datum isteka</string>
<string name="moveBarcodeToTopOfScreen">Premjesti crtični kod na vrh ekrana</string>
<string name="errorReadingImage">Nije bilo moguće učitati sliku</string>
@@ -225,13 +229,13 @@
<string name="sameAsCardId">Ista kao ID</string>
<string name="setBarcodeId">Postavi vrijednost crtičnog koda</string>
<string name="unsupportedBarcodeType">Ova se vrsta crtičnog koda još ne može prikazati. Možda će se podržati u novijoj verziji aplikacije.</string>
<string name="wrongValueForBarcodeType">Vrijednost nije ispravna za odabranu vrstu crtičnog koda</string>
<string name="wrongValueForBarcodeType">Vrijednost nije valjana za odabranu vrstu crtičnog koda</string>
<string name="intent_import_card_from_url_share_multiple_text">Želim dijeliti neke kartice s tobom</string>
<string name="backImageDescription">Stražnja slika</string>
<string name="setFrontImage">Postavi prednju sliku</string>
<string name="setBackImage">Postavi stražnju sliku</string>
<string name="removeImage">Ukloni sliku</string>
<string name="takePhoto">Snimi sliku</string>
<string name="takePhoto">Uslikaj fotografiju</string>
<string name="updateBarcodeQuestionTitle">Aktualizirati vrijednost crtičnog koda\?</string>
<string name="yes">Da</string>
<string name="no">Ne</string>
@@ -240,7 +244,6 @@
<string name="settings_oled_dark">Potpuno crna pozadina za tamnu temu</string>
<string name="settings_theme_color">Boja teme</string>
<string name="settings_brown_theme">Smeđa</string>
<string name="app_contributors">Doprinositelji: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="showMoreInfo">Prikaži informacije</string>
<string name="sort_by_name">Ime</string>
<string name="sort_by_most_recently_used">Nedavno korišteno</string>
@@ -248,27 +251,32 @@
<string name="shortcutSelectCard">Odaberi karticu</string>
<string name="previousCard">Prethodna</string>
<string name="nextCard">Sljedeća</string>
<string name="updateBalanceTitle">Koliko si potrošio/la ili primio/la?</string>
<string name="updateBalanceTitle">Koliko si potrošio/la\?</string>
<string name="updateBalanceHint">Upiši iznos</string>
<string name="about_title_fmt">Informacije o <xliff:g id="app_name">%s</xliff:g></string>
<string name="about_title_fmt">Informaije o <xliff:g id="app_name">%s</xliff:g></string>
<string name="failedToOpenUrl">Najprije instaliraj web preglednik</string>
<string name="icon_header_click_text">Dugim pritiskom uredi sličicu</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Pogledaj arhivu (<xliff:g>%1$d</xliff:g> kartica)</item>
<item quantity="few">Pogledaj arhivu (<xliff:g>%1$d</xliff:g> kartice)</item>
<item quantity="other">Pogledaj arhivu (<xliff:g>%1$d</xliff:g> kartica)</item>
</plurals>
<string name="icon_header_click_text">Dugim pritiskom uredite sličicu</string>
<string name="show_name_below_image_thumbnail">Prikaži ime ispod sličice</string>
<string name="show_note">Prikaži bilješku</string>
<string name="show_balance">Prikaži saldo</string>
<string name="show_validity">Prikaži valjanost</string>
<string name="card_id_must_not_be_empty">ID kartice ne smije biti prazna</string>
<string name="card_id_must_not_be_empty">ID oznaka kartice ne smije biti prazna</string>
<string name="balanceParsingFailed">Neispravni saldo</string>
<string name="add_a_card_in_a_different_way">Dodaj karticu na drugi način</string>
<string name="view_online">Pogledaj online</string>
<string name="settings_category_title_general">Opće</string>
<string name="manually_enter_barcode_instructions">Upiši broj ID-a ili tekst na kartici i pritisni crtični kod koji izgleda kao onaj na tvojoj kartici.</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Deaktivira zaključavanje ekrana tijekom prikaza kartice</string>
<string name="action_more_options">Više opcija</string>
<string name="action_more_options">Daljnje opcije</string>
<string name="permissionReadCardsDescription">čitaj tvoje Catima kartice i sve njihove pojedinosti, uključujući bilješke i slike</string>
<string name="enter_card_id">Upiši broj ID-a ili tekst na tvojoj kartici</string>
<string name="action_display_options">Opcije prikaza</string>
<string name="settings_display_barcode_max_brightness_summary">Potrebno za rad nekih čitača</string>
<string name="settings_display_barcode_max_brightness_summary">Neophodno za rad nekih skenera</string>
<string name="settings_oled_dark_summary">Smanjuje potrošnju baterije OLED ekrana</string>
<string name="settings_category_title_cards">Kartice</string>
<string name="addWithoutBarcode">Dodaj karticu bez crtičnog koda</string>
@@ -281,21 +289,4 @@
<string name="settings_category_title_privacy">Privatnost</string>
<string name="settings_keep_screen_on_summary">Deaktivira isključivanje ekrana tijekom prikaza kartice</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Uvijek okreni (zanemaruje postavke sustava)</string>
<string name="continue_">Nastavi</string>
<string name="add_manually_warning_message">Za neke trgovine se vrijednost crtičnog koda razlikuje od broja na kartici. Zbog toga ručno upisivanje crtičnog koda možda neće uvijek funkcionirati. Preporučuje se snimanje crtičnog koda pomoću kamere. Želiš li svejedno nastaviti?</string>
<string name="add_manually_warning_title">Preporučuje se snimanje</string>
<string name="addFromPdfFile">Odaberi PDF datoteku</string>
<string name="errorReadingFile">Nije bilo moguće pročitati datoteku</string>
<string name="failedLaunchingFileManager">Nije bilo moguće pronaći podržani upravljač datoteka</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Koji od pronađenih crtičnih kodova želiš koristiti?</string>
<string name="pageWithNumber">Stranica <xliff:g>%d</xliff:g></string>
<string name="spend">Potroši</string>
<string name="receive">Primi</string>
<string name="amountParsingFailed">Neispravan iznos</string>
<string name="noCameraFoundGuideText">Čini se da tvoj uređaj nema kameru. Ako je ima, pokušaj ponovo pokrenuti uređaj. Inače koristi gumb „Više opcija” za dodavanje crtičnog koda na jedan drugi način.</string>
<string name="importCancelled">Uvoz je prekinut</string>
<string name="exportCancelled">Izvoz je prekinut</string>
<string name="useBackImage">Koristi stražnju sliku</string>
<string name="useFrontImage">Koristi prednju sliku</string>
</resources>

View File

@@ -62,6 +62,7 @@
<string name="exportPasswordHint">Kód beírása</string>
<string name="failedGeneratingShareURL">Nem lehetett megosztható webcímet előállítani. Kérjük, ezt jelentse.</string>
<string name="settings_theme_color">Téma színe</string>
<string name="settings_grey_theme">Szürke</string>
<string name="sort">Rendezés</string>
<string name="on_google_play">a Google Playen</string>
<string name="and_data_usage">és adathasználat</string>
@@ -88,7 +89,7 @@
<string name="settings_theme">Téma</string>
<string name="settings_system_theme">Rendszer</string>
<string name="settings_light_theme">Világos</string>
<string name="settings_display_barcode_max_brightness">Kijelző világosítása</string>
<string name="settings_display_barcode_max_brightness">Vonalkód nézet világosítása</string>
<string name="settings_keep_screen_on">A képernyő bekapcsolva tartása</string>
<string name="settings_disable_lockscreen_while_viewing_card">Képernyőzárólás megakadályozása</string>
<string name="intent_import_card_from_url_share_text">Meg akarok veled osztani egy kártyát</string>
@@ -157,7 +158,6 @@
<string name="settings_blue_theme">Kék</string>
<string name="settings_sky_blue_theme">Égszínkék</string>
<string name="settings_brown_theme">Barna</string>
<string name="app_contributors">Lehetővé tették: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="showMoreInfo">Információk megjelenítése</string>
<string name="reverse">…fordított sorrendben</string>
<string name="sort_by">Rendezés:</string>
@@ -198,9 +198,12 @@
<string name="groupsList">Csoportok: <xliff:g>%s</xliff:g></string>
<string name="importCatimaMessage">Válassza ki az exportált <i>catima.zip</i> fájlt az importáláshoz.
\nLétrehozhatja az Importálás/exportálás menüből az Exportálást megnyomva egy másik Catima alkalmazásban.</string>
<string name="privacy_policy_popup_text">Adatvédelmi irányelvek nyilatkozata (némely alkalmazásbolt kéri):
\n
\nSEMMILYEN ADAT NEM KERÜL GYŰJTÉSRE, amit bárki ellenőrizhet, hiszen az alkalmazás szabad szoftver.</string>
<string name="importFidmeMessage">Válassza ki a FidMeből exportált <i>fidme-export-request-xxxxxx.zip</i> fájl majd importálja be, és utána válassza a kézi vonalkódbeírást.
\nEzt hozza létre a FidMe-profiljában az Adatvédelem rész választásával, majd a Saját adatok kinyerése megnyomásával.</string>
<string name="settings_card_orientation">Képernyő tájolása</string>
<string name="settings_card_orientation">Vonalkód tájolása</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> kártya (<xliff:g id="archivedCount">%2$d</xliff:g> archiválva)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> kártya (<xliff:g id="archivedCount">%2$d</xliff:g> archiválva)</item>
@@ -222,13 +225,17 @@
<string name="currentBalanceSentence">Jelenlegi egyenleg: <xliff:g>%s</xliff:g></string>
<string name="updateBalanceHint">Adja meg az összeget</string>
<string name="importCards">Kártyák importálása</string>
<string name="updateBalanceTitle">Mennyit költött és kapott?</string>
<string name="updateBalanceTitle">Mennyit költött\?</string>
<string name="newBalanceSentence">Új egyenleg: <xliff:g>%s</xliff:g></string>
<string name="cameraPermissionDeniedTitle">Nem sikerült hozzáférni a kamerához</string>
<string name="failedToRetrieveImageFile">Nem sikerült lekérni a képfájlt</string>
<string name="barcodeLongPressMessage">Csak képek nyithatók meg a galéria alkalmazásban</string>
<string name="unarchived">Kártya archiválása megszüntetve</string>
<string name="welcome">Üdvözöljük a Catimában</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Archívum megtekintése (<xliff:g>%1$d</xliff:g> kártya)</item>
<item quantity="other">Archívum megtekintése (<xliff:g>%1$d</xliff:g> kártya)</item>
</plurals>
<string name="updateBalance">Egyenleg frissítése</string>
<string name="noCameraPermissionDirectToSystemSetting">A vonalkódok leolvasásához a Catimának hozzá kell férnie a kamerához. Koppintson ide az engedélybeállítások módosításához.</string>
<string name="validFromDate">Érvényesség kezdete</string>
@@ -256,7 +263,7 @@
<string name="settings_oled_dark_summary">Csökkenti az OLED kijelzők akkumulátor-használatát</string>
<string name="settings_category_title_privacy">Adatvédelem</string>
<string name="settings_allow_content_provider_read_title">Engedélyezem más alkalmazások számára az adataimhoz való hozzáférést</string>
<string name="settings_category_title_cards">Kártyanézet</string>
<string name="settings_category_title_cards">Kártyák</string>
<string name="settings_category_title_general">Általános</string>
<string name="settings_keep_screen_on_summary">Letiltja a képernyő időtúllépését a kártya megtekintése közben</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Letiltja a képernyő időtúllépését a kártya megjelenítése közben</string>
@@ -275,23 +282,4 @@
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os és közreműködők</string>
<string name="show_archived_cards">Archivált kártyák megjelenítése</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Mindig forgassa (figyelmen kívül hagyja a rendszerbeállításokat)</string>
<string name="amountParsingFailed">Hibás érték</string>
<string name="add_manually_warning_title">Szkennelés ajánlott</string>
<string name="add_manually_warning_message">Egyes boltoknál a kártyán levő számsor különbözik a vonalkódtól. Emiatt a manuális szám beírás nem minden esetben fog működni. Erősen ajánlott inkább a vonalkód szkennelése kamerával. Biztosan folytatja?</string>
<string name="continue_">Tovább</string>
<string name="spend">Költött</string>
<string name="receive">Megkapott</string>
<string name="addFromPdfFile">PDF fájl kiválasztása</string>
<string name="errorReadingFile">A fájl nem olvasható</string>
<string name="pageWithNumber"><xliff:g>%d</xliff:g>. oldal</string>
<string name="failedLaunchingFileManager">Nem található támogatott fájlkezelő</string>
<string name="multipleBarcodesFoundPleaseChooseOne">A talált vonalkódok közül melyiket szeretné használni?</string>
<string name="noCameraFoundGuideText">Úgy tűnik, az eszközén nincs kamera. Ha van, próbálja meg újraindítani az eszközt. Másképp, használja a További beállítások gombot alul, hogy máshogy hozzáadjon egy vonalkódot.</string>
<string name="importCancelled">Importálás megszakítva</string>
<string name="exportCancelled">Exportálás megszakítva</string>
<string name="settings_use_volume_keys_navigation">Kártyák váltása a hangerőgombokkal</string>
<string name="settings_use_volume_keys_navigation_summary">A hangerőgombok használata a megjelenített kártya átváltásához</string>
<string name="useFrontImage">Elülső kép használata</string>
<string name="useBackImage">Hátsó kép használata</string>
</resources>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="storeName">Nama</string>
<string name="note">Keterangan</string>
<string name="delete">Hapus</string>
@@ -55,6 +55,7 @@
<string name="settings_blue_theme">Biru</string>
<string name="settings_green_theme">Hijau</string>
<string name="settings_sky_blue_theme">Biru Langit</string>
<string name="settings_grey_theme">Abu-abu</string>
<string name="settings_brown_theme">Cokelat</string>
<string name="settings_violet_theme">Ungu</string>
<string name="settings_magenta_theme">Magenta</string>
@@ -107,7 +108,7 @@
<string name="starImage">Favorit</string>
<string name="settings_light_theme">Terang</string>
<string name="settings_dark_theme">Gelap</string>
<string name="settings_display_barcode_max_brightness">Cerahkan layar</string>
<string name="settings_display_barcode_max_brightness">Terangkan tampilan barcode</string>
<string name="settings_keep_screen_on">Biarkan layar menyala</string>
<string name="settings_disable_lockscreen_while_viewing_card">Cegah kunci layar</string>
<string name="intent_import_card_from_url_share_text">Saya ingin berbagi kartu dengan anda</string>
@@ -135,19 +136,22 @@
<string name="points">Poin</string>
<string name="app_loyalty_card_keychain">Gantungan kunci kartu kesetiaan</string>
<string name="privacy_policy">Kebijakan Privasi</string>
<string name="importCatimaMessage">Pilih ekspor <i>catima.zip</i> Anda dari Catima untuk diimpor.
<string name="privacy_policy_popup_text">Pemberitahuan kebijakan privasi (diperlukan oleh beberapa toko aplikasi):
\n
\nTIDAK ADA DATA YANG DIKUMPULKAN SAMA SEKALI, yang dapat dikonfirmasi oleh siapa pun karena aplikasi kami adalah libre software.</string>
<string name="importCatimaMessage">Pilih ekspor <i>catima.zip</i> Anda dari Catima untuk diimpor.
\nBuat dari menu Impor/Ekspor aplikasi Catima lain dengan menekan Ekspor di sana terlebih dahulu.</string>
<string name="importFidmeMessage">Pilih ekspor <i>fidme-export-request-xxxxxx.zip</i> Anda dari FidMe untuk diimpor, dan pilih jenis barcode secara manual setelahnya.
<string name="importFidmeMessage">Pilih ekspor <i>fidme-export-request-xxxxxx.zip</i> Anda dari FidMe untuk diimpor, dan pilih jenis barcode secara manual setelahnya.
\nBuat dari profil FidMe Anda dengan memilih Perlindungan Data lalu tekan Ekstrak data saya terlebih dahulu.</string>
<string name="importLoyaltyCardKeychain">Impor dari Loyalty Card Keychain</string>
<string name="importLoyaltyCardKeychainMessage">Pilih ekspor <i>LoyaltyCardKeychain.csv</i> Anda dari Loyalty Card Keychain untuk diimpor.
<string name="importLoyaltyCardKeychainMessage">Pilih ekspor <i>LoyaltyCardKeychain.csv</i> Anda dari Loyalty Card Keychain untuk diimpor.
\nBuat dari menu Import/Export di Loyalty Card Keychain dengan menekan Export terlebih dahulu.</string>
<string name="importStocard">Impor dari Stocard</string>
<string name="importStocardMessage">Pilih ekspor <i>***.zip</i> Anda dari Stocard untuk diimpor.
<string name="importStocardMessage">Pilih ekspor <i>***.zip</i> Anda dari Stocard untuk diimpor.
\nDapatkan dengan mengirim email ke support@stocardapp.com untuk meminta ekspor data Anda.</string>
<string name="importVoucherVault">Impor dari Voucher Vault</string>
<string name="importVoucherVaultMessage">Pilih ekspor <i>vouchervault.json</i> Anda dari Voucher Vault untuk diimpor.
\nBuat dengan menekan Ekspor di Voucher Vault terlebih dahulu.</string>
<string name="importVoucherVaultMessage">Pilih ekspor <i>vouchervault.json</i> Anda dari Vault Voucher untuk diimpor.
\nBuat dengan menekan Ekspor di Vault Voucher terlebih dahulu.</string>
<string name="unsupportedBarcodeType">Jenis barcode ini belum dapat ditampilkan. Ini mungkin didukung di versi aplikasi yang lebih baru.</string>
<string name="wrongValueForBarcodeType">Nilai tidak berlaku untuk jenis barcode yang dipilih</string>
<string name="frontImageDescription">Gambar depan</string>
@@ -157,7 +161,6 @@
<string name="passwordRequired">Silahkan masukan kata sandi</string>
<string name="exportPassword">Tetapkan kata sandi untuk melindungi ekspor anda (opsional)</string>
<string name="failedGeneratingShareURL">Tidak dapat membuat alamat berbagi. Mohon laporkan ini.</string>
<string name="app_contributors">Pengembangan dibantu oleh: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="reverse">…dalam urutan terbalik</string>
<string name="version_history">Riwayat Versi</string>
<string name="help_translate_this_app">Bantu terjemahkan aplikasi ini</string>
@@ -195,10 +198,13 @@
<string name="translate_platform">di Weblate</string>
<string name="welcome">Selamat datang di Catima</string>
<string name="failedToOpenUrl">Install browser web terlebih dahulu</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="other">Lihat arsip (<xliff:g>%1$d</xliff:g> kartu)</item>
</plurals>
<string name="failedLaunchingPhotoPicker">Tidak dapat menemukan aplikasi galeri yang didukung</string>
<string name="previousCard">Sebelumnya</string>
<string name="nextCard">Berikutnya</string>
<string name="settings_card_orientation">Orientasi layar</string>
<string name="settings_card_orientation">Orientasi Barcode</string>
<string name="settings_follow_system_orientation">Ikuti sistem</string>
<string name="settings_portrait_orientation">Potret</string>
<string name="settings_landscape_orientation">Lanskap</string>
@@ -224,7 +230,7 @@
<string name="updateBalance">Perbarui saldo</string>
<string name="updateBalanceHint">Masukkan jumlah</string>
<string name="currentBalanceSentence">Saldo saat ini: <xliff:g>%s</xliff:g></string>
<string name="updateBalanceTitle">Berapa banyak yang kamu belanjakan atau terima?</string>
<string name="updateBalanceTitle">Berapa banyak yang telah kamu habiskan \?</string>
<string name="noCameraPermissionDirectToSystemSetting">Untuk memindai barcode, Catima membutuhkan akses ke kamera mu. Tap disini untuk mengganti pengaturan perizinan mu.</string>
<string name="cameraPermissionRequired">Berikan izin untuk mengakses kamera anda…</string>
<string name="storageReadPermissionRequired">Berikan izin untuk membaca penyimpanan anda…</string>
@@ -254,7 +260,7 @@
<string name="settings_category_title_general">Umum</string>
<string name="settings_display_barcode_max_brightness_summary">Diperlukan agar beberapa pemindai dapat berfungsi</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Menonaktifkan kunci layar saat melihat kartu</string>
<string name="settings_category_title_cards">Tampilan kartu</string>
<string name="settings_category_title_cards">Kartu</string>
<string name="settings_category_title_privacy">Privasi</string>
<string name="show_archived_cards">Tampilkan kartu yang sudah disimpan</string>
<string name="action_display_options">Pilihan tampilan</string>
@@ -269,23 +275,4 @@
<string name="addWithoutBarcode">Tambah kartu tanpa barcode</string>
<string name="field_must_not_be_empty">Isian tidak boleh kosong</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Selalu rotasi (abaikan pengaturan sistem)</string>
<string name="add_manually_warning_title">Pemindaian sangat dianjurkan</string>
<string name="continue_">Lanjut</string>
<string name="failedLaunchingFileManager">Tidak dapat menemukan pengelola file yang didukung</string>
<string name="errorReadingFile">Tidak dapat membaca file</string>
<string name="addFromPdfFile">Pilih file PDF</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Barcode mana yang ingin Anda gunakan?</string>
<string name="pageWithNumber">Halaman <xliff:g>%d</xliff:g></string>
<string name="spend">Dibelanjakan</string>
<string name="receive">Terima</string>
<string name="amountParsingFailed">Jumlah tidak valid</string>
<string name="add_manually_warning_message">Untuk beberapa toko, nilai barcode berbeda dengan nomor yang tertulis di kartu. Oleh karena itu, memasukkan barcode secara manual mungkin tidak selalu berhasil. Sangat disarankan untuk memindai barcode dengan kamera anda. Apakah anda masih ingin melanjutkan?</string>
<string name="noCameraFoundGuideText">Perangkat Anda sepertinya tidak memiliki kamera. Jika iya, coba mulai ulang perangkat. Jika tidak, gunakan tombol Opsi lainnya di bawah untuk menambahkan barcode dengan cara lain.</string>
<string name="importCancelled">Impor dibatalkan</string>
<string name="exportCancelled">Ekspor dibatalkan</string>
<string name="useFrontImage">Gunakan gambar depan</string>
<string name="useBackImage">Gunakan gambar belakang</string>
<string name="settings_use_volume_keys_navigation">Ganti kartu menggunakan tombol volume</string>
<string name="settings_use_volume_keys_navigation_summary">Gunakan tombol volume untuk mengubah kartu mana yang ditampilkan</string>
</resources>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_add">Bæta</string>
<string name="noBarcode">Nei strikamerkið</string>
<string name="action_search">Leita að</string>
@@ -81,9 +81,10 @@
<string name="noGiftCardsGroup">Búðu til nokkur kort og settu þau síðan í hópinn hér.</string>
<string name="settings_brown_theme">Brún</string>
<string name="settings_green_theme">Grænn</string>
<string name="settings_grey_theme">Grár</string>
<string name="sort">flokka</string>
<string name="sort_by">flokka Eftir</string>
<string name="nextCard">Næsta</string>
<string name="settings_blue_theme">Blár</string>
<string name="settings_sky_blue_theme">Himinblár</string>
</resources>
</resources>

View File

@@ -50,7 +50,7 @@
<string name="settings_system_theme">Sistema</string>
<string name="settings_light_theme">Chiaro</string>
<string name="settings_dark_theme">Scuro</string>
<string name="settings_display_barcode_max_brightness">Aumenta la luminosità</string>
<string name="settings_display_barcode_max_brightness">Aumenta luminosità dello schermo quando viene aperto un codice a barre</string>
<string name="intent_import_card_from_url_share_text">Voglio condividere una carta fedeltà con te</string>
<string name="exportSuccessful">Dati della carta esportati</string>
<string name="importSuccessful">Dati importati</string>
@@ -96,6 +96,9 @@
<string name="chooseImportType">Importa i dati da</string>
<string name="settings_disable_lockscreen_while_viewing_card">Impedisci il blocco dello schermo</string>
<string name="accept">Accetta</string>
<string name="privacy_policy_popup_text">Informativa sulla riservatezza (richiesta da alcuni app store):
\n
\nNESSUN DATO VIENE RACCOLTO, cosa che chiunque può confermare dato che la nostra applicazione è un software libero.</string>
<string name="privacy_policy">Informativa sulla riservatezza</string>
<string name="importVoucherVaultMessage">Seleziona il tuo file di esportazione <i>vouchervault.json</i> da Voucher Vault per importarlo.
\nCrealo premendo prima Esporta in Voucher Vault.</string>
@@ -158,6 +161,7 @@
<string name="settings_system_locale">Sistema</string>
<string name="settings_locale">Lingua</string>
<string name="settings_brown_theme">Marrone</string>
<string name="settings_grey_theme">Grigio</string>
<string name="settings_green_theme">Verde</string>
<string name="settings_sky_blue_theme">Azzurro</string>
<string name="settings_blue_theme">Blu</string>
@@ -166,7 +170,6 @@
<string name="settings_pink_theme">Rosa</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_theme_color">Colore del tema</string>
<string name="app_contributors">Reso possibile da: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="noGroupCards">Questo gruppo è vuoto</string>
<string name="barcodeImageDescriptionWithType">Immagine del codice a barre in formato <xliff:g>%s</xliff:g></string>
<string name="sort_by">Ordina per</string>
@@ -207,7 +210,7 @@
</plurals>
<string name="settings_oled_dark">Sfondo nero puro per il tema scuro</string>
<string name="include_if_asking_support">Se vuoi richiedere supporto, includi le seguenti informazioni:</string>
<string name="settings_card_orientation">Orientamento dello schermo</string>
<string name="settings_card_orientation">Orientamento del codice a barre</string>
<string name="settings_follow_system_orientation">Segui il sistema</string>
<string name="duplicateCard">Duplica</string>
<string name="archive">Archivia</string>
@@ -227,12 +230,17 @@
<string name="nextCard">Successivo</string>
<string name="welcome">Benvenuti su Catima</string>
<string name="failedToOpenUrl">Installa prima un browser web</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Visualizza archivio (<xliff:g>%1$d</xliff:g> scheda)</item>
<item quantity="many">Visualizza archivio (<xliff:g>%1$d</xliff:g> carta)</item>
<item quantity="other">Visualizza archivio (<xliff:g>%1$d</xliff:g> carte)</item>
</plurals>
<string name="failedToRetrieveImageFile">Impossibile ottenere il file dell\'immagine</string>
<string name="barcodeLongPressMessage">Si possono aprire solo immagini dell\'app della galleria</string>
<string name="cameraPermissionDeniedTitle">È impossibile accedere alla fotocamera</string>
<string name="noCameraPermissionDirectToSystemSetting">Per poter scansionare i codici a barre, Catima ha bisogno di accedere alla tua fotocamera. Premi qui per poter cambiare le impostazioni dei permessi.</string>
<string name="updateBalance">Aggiorna bilancio</string>
<string name="updateBalanceTitle">Quanto hai speso o ricevuto?</string>
<string name="updateBalanceTitle">Quanto hai speso\?</string>
<string name="updateBalanceHint">Inserisci l\'importo</string>
<string name="currentBalanceSentence">Bilancio attuale: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">Nuovo bilancio: <xliff:g>%s</xliff:g></string>
@@ -264,7 +272,7 @@
<string name="settings_keep_screen_on_summary">Disattiva il timeout dello schermo durante la visualizzazione di una carta</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Disattiva il blocco dello schermo durante la visualizzazione di una carta</string>
<string name="settings_oled_dark_summary">Riduce il consumo della batteria sui display OLED</string>
<string name="settings_category_title_cards">Vista carta</string>
<string name="settings_category_title_cards">Carte</string>
<string name="settings_category_title_general">Generali</string>
<string name="settings_category_title_privacy">Privacy</string>
<string name="app_copyright_short">Copyright © Sylvia van Os e contributori</string>
@@ -281,23 +289,4 @@
<string name="addWithoutBarcode">Aggiungere una carta senza codice a barre</string>
<string name="field_must_not_be_empty">Il campo non deve essere vuoto</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Ruota sempre (ignora le impostazioni di sistema)</string>
<string name="add_manually_warning_title">Consigliata scansione</string>
<string name="continue_">Successivo</string>
<string name="add_manually_warning_message">In alcuni negozi, il valore del codice a barre differisce dal numero scritto sulla carta. Per questo motivo, l\'inserimento manuale del codice a barre potrebbe non funzionare sempre. Si consiglia di scansionare il codice a barre con la fotocamera. Vuoi continuare lo stesso?</string>
<string name="amountParsingFailed">Importo non valido</string>
<string name="spend">Spendi</string>
<string name="receive">Ricevi</string>
<string name="errorReadingFile">Impossibile leggere il file</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Quale dei codici a barre trovati vuoi utilizzare?</string>
<string name="addFromPdfFile">Seleziona un file PDF</string>
<string name="failedLaunchingFileManager">Impossibile trovare un file manager supportato</string>
<string name="pageWithNumber">Pagina <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Sembra che il tuo dispositivo non abbia una fotocamera. In tal caso, prova a riavviare il dispositivo. Altrimenti, utilizza il pulsante Altre opzioni di seguito per aggiungere un codice a barre in un altro modo.</string>
<string name="importCancelled">Importazione annullata</string>
<string name="exportCancelled">Esportazione annullata</string>
<string name="useBackImage">Usa l\'immagine posteriore</string>
<string name="useFrontImage">Usa l\'immagine anteriore</string>
<string name="settings_use_volume_keys_navigation">Cambia carte con i pulsanti di volume</string>
<string name="settings_use_volume_keys_navigation_summary">Utilizza i pulsanti di volume per modificare la carta visualizzata</string>
</resources>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="wrongValueForBarcodeType">選択したバーコード形式ではこの番号は使用できません</string>
<string name="unsupportedBarcodeType">このバーコード形式は表示できません。将来のアップデートにより対応するかもしれません。</string>
<string name="setBarcodeId">バーコード番号を設定</string>
@@ -13,6 +13,9 @@
\nファイルがない場合、他のCatimaアプリでファイルをエクスポートしてください。</string>
<string name="importCatima">Catimaからインポート</string>
<string name="accept">承認</string>
<string name="privacy_policy_popup_text">プライバシーポリシーの案内:
\n
\nこのアプリはユーザーのデータを一切収集しません。</string>
<string name="privacy_policy">プライバシーポリシー</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="chooseImportType">インポート元を選択</string>
@@ -49,8 +52,8 @@
<string name="exportSuccessful">データがエクスポートされました</string>
<string name="importSuccessful">データがインポートされました</string>
<string name="intent_import_card_from_url_share_text">カード共有をしましょう</string>
<string name="settings_disable_lockscreen_while_viewing_card">バーコード表示中画面をロックしない</string>
<string name="settings_keep_screen_on">バーコード表示中画面を点けたままにする</string>
<string name="settings_disable_lockscreen_while_viewing_card">バーコード表示中画面をロックしない</string>
<string name="settings_keep_screen_on">バーコード表示中画面を消灯しない</string>
<string name="settings_display_barcode_max_brightness">バーコード表示画面を明るくする</string>
<string name="settings_dark_theme">ダーク</string>
<string name="settings_light_theme">ライト</string>
@@ -61,11 +64,13 @@
<string name="thumbnailDescription">サムネイル</string>
<string name="selectBarcodeTitle">バーコード選択</string>
<string name="app_libraries">Libre third-party libraries: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="debug_version_fmt">バージョン: <xliff:g id="version">%s</xliff:g></string>
<string name="about_title_fmt"><xliff:g id="app_name">%s</xliff:g> について</string>
<string name="debug_version_fmt">Version: <xliff:g id="version">%s</xliff:g></string>
<string name="about_title_fmt">About <xliff:g id="app_name">%s</xliff:g></string>
<string name="app_license">Copylefted libre software, licensed GPLv3+</string>
<string name="app_copyright_old">Based on Loyalty Card Keychain
\ncopyright © 20162020 Branden Archer.</string>
<string name="app_resources">Libre third-party resources: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="about">このアプリについて</string>
<string name="about">Catimaについて</string>
<string name="importOptionApplicationButton">外部のアプリを使う</string>
<string name="importOptionApplicationExplanation">任意のアプリやお気に入りのファイルマネージャーからファイルを開く。</string>
<string name="importOptionApplicationTitle">外部アプリを使う</string>
@@ -112,7 +117,7 @@
<string name="note">メモ</string>
<string name="storeName">名前</string>
<string name="noMatchingGiftCards">該当なし</string>
<string name="noGiftCards">+ボタンからカードを新規追加、⋮メニューからカードをインポートすることができます</string>
<string name="noGiftCards">まず初めに+ボタンを押してカードを追加するか、メニューから以前のカードをインポートしてください</string>
<string name="action_add">追加</string>
<string name="action_search">検索</string>
<string name="intent_import_card_from_url_share_multiple_text">カードを共有しましょう</string>
@@ -127,8 +132,8 @@
<string name="takePhoto">写真を撮影する</string>
<string name="removeImage">画像を削除</string>
<string name="setBackImage">裏面の画像を設定</string>
<string name="setFrontImage">面の画像を設定</string>
<string name="photos">画像</string>
<string name="setFrontImage">オモテ面の画像を設定</string>
<string name="photos">フォト</string>
<string name="backImageDescription"></string>
<string name="frontImageDescription"></string>
<string name="importStocardMessage">Stocardでエクスポートした<i>***.zip</i>ファイルを選択してください。
@@ -146,15 +151,15 @@
<item quantity="other"><xliff:g>%d</xliff:g> 枚のカードの削除</item>
</plurals>
<string name="barcodeImageDescriptionWithType">バーコード形式の画像 <xliff:g>%s</xliff:g></string>
<string name="app_contributors">Made possible by: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="settings_brown_theme">ブラウン/茶色</string>
<string name="settings_green_theme">グリーン/緑色</string>
<string name="settings_sky_blue_theme">スカイブルー/水色</string>
<string name="settings_blue_theme">ブルー/青色</string>
<string name="settings_violet_theme">バイオレット/菫色</string>
<string name="settings_magenta_theme">マゼンタ/赤紫色</string>
<string name="settings_pink_theme">ピンク/桃色</string>
<string name="settings_catima_theme">Catimaテーマ</string>
<string name="settings_brown_theme">Brown</string>
<string name="settings_grey_theme">Gray</string>
<string name="settings_green_theme">Green</string>
<string name="settings_sky_blue_theme">Sky Blue</string>
<string name="settings_blue_theme">Blue</string>
<string name="settings_violet_theme">Violet</string>
<string name="settings_magenta_theme">Magenta</string>
<string name="settings_pink_theme">Pink</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_theme_color">テーマカラー</string>
<string name="settings_system_locale">システムに従う</string>
<string name="settings_locale">言語</string>
@@ -171,63 +176,25 @@
<string name="exportPasswordHint">パスワードを入力してください</string>
<string name="version_history">更新履歴</string>
<string name="credits">貢献者</string>
<string name="help_translate_this_app">翻訳を手伝う</string>
<string name="help_translate_this_app">このアプリの翻訳を手伝う</string>
<string name="license">ライセンス</string>
<string name="on_google_play">Google Play</string>
<string name="report_error">問題を報告する</string>
<string name="report_error">エラーを報告する</string>
<string name="reverse">逆順</string>
<string name="and_data_usage">データの扱いなど</string>
<string name="and_data_usage">and data usage</string>
<string name="group_updated">グループを更新しました</string>
<string name="editGroup">グループ編集: <xliff:g>%s</xliff:g></string>
<string name="selectColor">色を選択</string>
<string name="setIcon">サムネイルを設定</string>
<string name="setIcon">アイコン設定</string>
<string name="group_edit">グループ編集</string>
<string name="group_name_already_in_use">このグループ名は既に使用されています</string>
<string name="group_name_is_empty">空欄にすることはできません</string>
<string name="group_name_is_empty">グループ名を入力してください</string>
<string name="shortcutSelectCard">カードを選択してください</string>
<string name="translate_platform">Weblate</string>
<string name="translate_platform">on Weblate</string>
<string name="options">オプション</string>
<string name="show_note">メモを表示</string>
<string name="validFromDate">有効期限</string>
<string name="chooseValidFromDate">有効期限を選択</string>
<string name="anyDate">無期限</string>
<string name="app_name">Catima</string>
<string name="settings_card_orientation">バーコードの向き</string>
<string name="settings_display_barcode_max_brightness_summary">仕事をするためにいくつかのスキャナーが必要</string>
<string name="settings_follow_system_orientation">システムに従う</string>
<string name="storageReadPermissionRequired">このアクションのためにストレージの読み取り権限を許可…</string>
<string name="cameraPermissionDeniedTitle">カメラへアクセスできません</string>
<string name="settings_follow_sensor_orientation">自動回転 (システムを無視)</string>
<string name="cameraPermissionRequired">このアクションのためにカメラへのアクセス権限の許可…</string>
<string name="settings_landscape_orientation"></string>
<string name="settings_portrait_orientation"></string>
<string name="noGiftCardsGroup">いくつかのカードを作って、それらをこのグループにアサインします。</string>
<string name="noCameraPermissionDirectToSystemSetting">バーコードをスキャンするためには、Catimaはカメラへのアクセスを必要とします。ここをタップして権限設定の変更をお願いします。</string>
<string name="importCards">カードをインポート</string>
<string name="show_balance">残高を表示</string>
<string name="show_validity">有効期限を表示</string>
<string name="donate">寄付する</string>
<string name="duplicateCard">複製</string>
<string name="unarchived">アーカイブを解除しました</string>
<string name="welcome">Catimaへようこそ</string>
<string name="show_name_below_image_thumbnail">画像サムネイルの下に名前を表示</string>
<string name="settings_keep_screen_on_summary">画面の自動消灯を無効化します</string>
<string name="settings_category_title_cards">カード</string>
<string name="settings_category_title_general">一般</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">画面のロックを無効化します</string>
<string name="action_display_options">表示の設定</string>
<string name="unarchive">アーカイブ解除</string>
<string name="archive">アーカイブ</string>
<string name="archived">アーカイブしました</string>
<string name="show_archived_cards">アーカイブしたカードを表示</string>
<string name="addFromPdfFile">PDFファイルを選択</string>
<string name="addWithoutBarcode">バーコードを登録せずにカードを追加</string>
<string name="failedToOpenUrl">ブラウザーをインストールしてください</string>
<string name="previousCard">前へ</string>
<string name="nextCard">次へ</string>
<string name="settings_lock_on_opening_orientation">カードを開いた時の向きに固定</string>
<string name="settings_oled_dark">ダークテーマで黒い背景を使用する</string>
<string name="settings_oled_dark_summary">有機ELディスプレイでの電池の使用量を削減します</string>
<string name="action_more_options">オプション</string>
<string name="add_a_card_in_a_different_way">別の方法でカードを追加</string>
</resources>

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