summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcyberta <cyberta@riseup.net>2023-08-01 12:19:53 +0000
committercyberta <cyberta@riseup.net>2023-08-01 12:19:53 +0000
commit0f8784ecc74275e191d6a211267cbb7a13810d1a (patch)
tree90aae58fe59b88f651b07255b0c691dc0593c0b9
parenta27fc2100f1aa826843c3fd61313d3e5858c23ca (diff)
parent13fb934130f71ba53f3ea2dce21e8886e539878c (diff)
Merge branch 'appstore-meta' into 'master'
Add store listing data See merge request leap/bitmask_android!250
-rw-r--r--.tx/config22
-rw-r--r--README.md5
-rwxr-xr-xscripts/fetch-play-metadata.py144
-rwxr-xr-xscripts/prepareForTx.py107
-rw-r--r--src/README.md43
-rw-r--r--src/custom/fastlane/metadata/en-US/changelogs/169000.txt9
-rw-r--r--src/custom/fastlane/metadata/en-US/full_description.txt7
-rw-r--r--src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/1_en-US.pngbin0 -> 162001 bytes
-rw-r--r--src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/2_en-US.pngbin0 -> 269807 bytes
-rw-r--r--src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/3_en-US.pngbin0 -> 248841 bytes
-rw-r--r--src/custom/fastlane/metadata/en-US/short_description.txt1
-rw-r--r--src/custom/fastlane/metadata/en-US/title.txt1
-rw-r--r--src/custom/fastlane/metadata/en-US/video.txt (renamed from src/custom/fastlane/metadata/android/README.md)0
-rw-r--r--src/custom/fastlane/metadata/nl/full_description.txt3
-rw-r--r--src/custom/fastlane/metadata/nl/short_description.txt1
-rw-r--r--src/custom/fastlane/metadata/nl/store-meta-nl.json5
-rw-r--r--src/custom/fastlane/metadata/nl/title.txt1
-rw-r--r--src/normal/fastlane/metadata/en-US/changelogs/168000.txt8
-rw-r--r--src/normal/fastlane/metadata/en-US/full_description.txt12
-rw-r--r--src/normal/fastlane/metadata/en-US/short_description.txt2
-rw-r--r--src/normal/fastlane/metadata/en-US/title.txt1
-rw-r--r--src/normal/fastlane/metadata/en-US/video.txt (renamed from src/normal/fastlane/metadata/android/README.md)0
-rw-r--r--src/normal/fastlane/metadata/nl-NL/video.txt0
-rw-r--r--src/normal/fastlane/metadata/nl/full_description.txt11
-rw-r--r--src/normal/fastlane/metadata/nl/short_description.txt1
-rw-r--r--src/normal/fastlane/metadata/nl/store-meta-nl.json5
-rw-r--r--src/normal/fastlane/metadata/nl/title.txt1
-rw-r--r--src/normal/fastlane/metadata/tr/full_description.txt12
-rw-r--r--src/normal/fastlane/metadata/tr/short_description.txt2
-rw-r--r--src/normal/fastlane/metadata/tr/store-meta-tr.json5
-rw-r--r--src/normal/fastlane/metadata/tr/title.txt1
-rw-r--r--src/normal/fastlane/metadata/tr/tx-values-tr.json1
32 files changed, 408 insertions, 3 deletions
diff --git a/.tx/config b/.tx/config
index 197fe03a..37fa2eba 100644
--- a/.tx/config
+++ b/.tx/config
@@ -1,18 +1,34 @@
[main]
-host = https://www.transifex.com
+host = https://rest.api.transifex.com
lang_map = es_AR: es-rAR, fa_IR: fa-rIR, kn_IN: kn-rIN, pt_BR: pt-rBR, pt_PT: pt-rPT, zh: zh-rCN, zh_TW: zh-rTW, nb: no
-[bitmask.strings]
+[o:otf:p:bitmask:r:bitmask]
file_filter = app/src/main/res/values-<lang>/strings.xml
minimum_perc = 75
source_file = app/src/main/res/values/strings.xml
source_lang = en
type = ANDROID
+resource_name = Bitmask Android
-[bitmask.riseupvpn]
+[o:otf:p:bitmask:r:riseupvpn]
file_filter = app/src/custom/res/values-<lang>/strings.xml
minimum_perc = 75
source_file = app/src/custom/res/values/strings.xml
source_lang = en
type = ANDROID
+resource_name = RiseupVPN Android
+
+[o:otf:p:bitmask:r:bitmask-playstore-listing]
+source_file = se.leap.bitmasakclient.json
+type = KEYVALUEJSON
+resource_name = Bitmask details in Appstore
+file_filter = src/normal/fastlane/metadata/<lang>/store-meta-<lang>.json
+minimum_perc = 96
+
+[o:otf:p:bitmask:r:riseupvpn-playstore-listing]
+source_file = se.leap.riseupvpn-desc.json
+type = KEYVALUEJSON
+resource_name = RiseupVPN details in Appstore
+file_filter = src/custom/fastlane/metadata/<lang>/store-meta-<lang>.json
+minimum_perc = 96
diff --git a/README.md b/README.md
index e596b192..61384eb6 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,7 @@ Please see the [issues](https://0xacab.org/leap/bitmask_android/issues) section
* [Debug APKs](#debug-apks)
* [Release APKs](#release-apks)
* [Signed Release APKs](#signed-release-apks)
+ * [Localization](#localize)
* [Supported Versions](#supported-versions)
* [Acknowledgments](#acknowledgments)
* [Contributing](#contributing)
@@ -198,6 +199,10 @@ You can execute all unit tests from the command line with:
./gradlew testCustomProductionFatReleaseUnitTest testNormalProductionFatReleaseUnitTest
```
+## Localization and translate <a name="Localization"></a>
+
+All the localizations happen in Transifex. How to generate, push, pull the translations are detailed in src/README.md
+
## Supported Versions <a name="supported-versions"></a>
Currently API 16 (Android 4.1) - API 30 (Android 11) are officially supported. Keep backwards compatibility in mind if you plan to contribute new features.
diff --git a/scripts/fetch-play-metadata.py b/scripts/fetch-play-metadata.py
new file mode 100755
index 00000000..7c65b648
--- /dev/null
+++ b/scripts/fetch-play-metadata.py
@@ -0,0 +1,144 @@
+import os
+import argparse
+import json
+from googleapiclient.discovery import build
+from google.oauth2 import service_account
+
+# Load API key from environment variable
+api_key = os.environ.get('GOOGLE_PLAY_API_KEY')
+
+# Load command-line arguments
+parser = argparse.ArgumentParser(description='Fetch app details from Google Play Store.')
+parser.add_argument('package_name', help='Package name of the app')
+parser.add_argument('--source-language', action='store_true', help='Fetch app description in source language')
+parser.add_argument('--list-languages', action='store_true', help='List all supported languages')
+parser.add_argument('--extract-details', action='store_true', help='Extract and save app details as JSON')
+parser.add_argument('--extract-changelog', action='store_true', help='Extract and save changelog as JSON')
+args = parser.parse_args()
+
+# Create a service account credentials object
+credentials = service_account.Credentials.from_service_account_file(
+ '/home/kwadronaut/dev/leap/secrets/android-api.json',
+ scopes=['https://www.googleapis.com/auth/androidpublisher']
+)
+
+# Build the service object for the Google Play Developer API
+service = build('androidpublisher', 'v3', credentials=credentials, cache_discovery=False)
+
+# Fetch app details
+def fetch_app_details(package_name, language):
+ # Create a new edit
+ edit_request = service.edits().insert(body={}, packageName=package_name)
+ edit_response = edit_request.execute()
+ edit_id = edit_response['id']
+
+ # Fetch the app listing for the specified language within the edit
+ app_details = service.edits().listings().get(
+ packageName=package_name,
+ editId=edit_id,
+ language=language
+ ).execute()
+
+ # Commit the edit (optional)
+ service.edits().commit(
+ packageName=package_name,
+ editId=edit_id
+ ).execute()
+
+ return app_details, edit_id
+
+# Fetch changelog for a specific version
+def fetch_changelog(package_name, edit_id):
+ # Fetch the tracks for the package
+ tracks = service.edits().tracks().list(packageName=package_name, editId=edit_id).execute()
+ track = tracks['tracks'][0]['track']
+
+ # Fetch the changelog for the track
+ changelog = service.edits().tracks().get(packageName=package_name, editId=edit_id, track=track).execute()
+
+ return changelog
+
+# Package name
+package_name = args.package_name
+
+# Fetch app details
+try:
+ #app_details, edit_id = fetch_app_details(package_name, 'en-US')
+ app_details, edit_id = fetch_app_details(package_name, 'nl-NL')
+ print("App Details:")
+ print(app_details)
+except Exception as e:
+ print("An error occurred:", str(e))
+
+# List all supported languages
+if args.list_languages:
+ try:
+ # Create a new edit
+ edit_request = service.edits().insert(body={}, packageName=package_name)
+ edit_response = edit_request.execute()
+ edit_id = edit_response['id']
+
+ # Fetch the app listings for the edit
+ listings = service.edits().listings().list(packageName=package_name, editId=edit_id).execute()
+ supported_languages = [listing['language'] for listing in listings['listings']]
+ print("Supported Languages:")
+ for language in supported_languages:
+ print(language)
+
+ # Commit the edit
+ service.edits().commit(packageName=package_name, editId=edit_id).execute()
+ except Exception as e:
+ print("An error occurred:", str(e))
+
+# Extract and save app details as JSON
+if args.extract_details:
+ try:
+ # Extract the text fields from app details
+ title = app_details['title']
+ full_description = app_details['fullDescription']
+ short_description = app_details['shortDescription']
+
+ # Create a dictionary to hold the extracted app details
+ extracted_details = {
+ 'title': title,
+ 'full_description': full_description,
+ 'short_description': short_description
+ }
+
+ # Determine the output file path based on the language
+ language = 'en-US' # Update with the desired language
+ json_file_path = f"locale/{language}/transifex.json"
+
+ # Create the output directory if it doesn't exist
+ os.makedirs(os.path.dirname(json_file_path), exist_ok=True)
+
+ # Save the extracted details as JSON
+ with open(json_file_path, 'w', encoding='utf-8') as json_file:
+ json.dump(extracted_details, json_file, ensure_ascii=False, indent=4)
+
+ print(f"App details extracted and saved to {json_file_path} as JSON successfully.")
+ except Exception as e:
+ print("An error occurred:", str(e))
+
+# Extract and save changelog as JSON
+if args.extract_changelog:
+ try:
+ changelog = fetch_changelog(package_name, edit_id)
+ print("Changelog:")
+ print(changelog)
+
+ # Determine the output file path based on the language
+ language = 'en-US' # Update with the desired language
+ json_file_path = f"locale/{language}/transifex.json"
+
+ # Create the output directory if it doesn't exist
+ os.makedirs(os.path.dirname(json_file_path), exist_ok=True)
+
+ # Save the changelog as JSON
+ with open(json_file_path, 'w', encoding='utf-8') as json_file:
+ json.dump(changelog, json_file, ensure_ascii=False, indent=4)
+
+ print(f"Changelog extracted and saved to {json_file_path} as JSON successfully.")
+ except Exception as e:
+ print("An error occurred:", str(e))
+
diff --git a/scripts/prepareForTx.py b/scripts/prepareForTx.py
new file mode 100755
index 00000000..c683c84a
--- /dev/null
+++ b/scripts/prepareForTx.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python3
+""
+__author__ = "kwadronaut"
+__copyright__ = "Copyright 2023, LEAP"
+__license__ = "GPL3 or later3 or later3 or later"
+__version__ = "1"
+
+import os
+import re
+import argparse
+import json
+
+# Set the path to the res directory containing different language folders
+main_res_dir = "../app/src/main/res"
+custom_res_dir = "../app/src/custom/res"
+
+# List all valid locale folders in the res directory
+def list_locales(app_type):
+ locales = []
+ if app_type == "main":
+ res_dir = main_res_dir
+ elif app_type == "custom":
+ res_dir = custom_res_dir
+ else:
+ raise ValueError("Invalid app type. Use 'main' or 'custom'.")
+
+ valid_locale_pattern = re.compile(r'^values-(?P<language>[a-z]{2})(-(?P<script>[a-zA-Z]{4}))?(-r(?P<region>[a-zA-Z]{2}))?$')
+ for folder in os.listdir(res_dir):
+ if valid_locale_pattern.match(folder):
+ locale_code = valid_locale_pattern.match(folder).group(0)
+ locales.append(locale_code)
+ return locales
+
+# Create empty JSON file for each locale metadata directory
+# If there's no file, tx will skip the translations
+def create_metadata_files(locales, app_type):
+ if app_type == "main":
+ metadata_dir = "../src/normal/fastlane/metadata"
+ elif app_type == "custom":
+ metadata_dir = "../src/custom/fastlane/metadata"
+ else:
+ raise ValueError("Invalid app type. Use 'main' or 'custom'.")
+
+ for locale_code in locales:
+ # Remove "values-" prefix from the locale directory name
+ locale_dir_name = locale_code.replace("values-", "")
+ file_path = os.path.join(metadata_dir, locale_dir_name, f"store-meta-{locale_dir_name}.json")
+ if not os.path.exists(file_path): # Check if the file already exists
+ os.makedirs(os.path.dirname(file_path), exist_ok=True)
+ with open(file_path, "w", encoding="utf-8") as file:
+ file.write("{}") # Write an empty JSON object to the file
+
+# Split JSON data and save to separate files for each locale
+def split_json_and_save(locales, metadata_dir):
+ for locale_code in locales:
+ locale_dir_name = locale_code.replace("values-", "")
+ json_file_path = os.path.join(metadata_dir, locale_dir_name, f"store-meta-{locale_dir_name}.json")
+
+ if os.path.exists(json_file_path):
+ with open(json_file_path, "r", encoding="utf-8") as json_file:
+ json_data = json.load(json_file)
+
+ title = json_data.get("title")
+ full_description = json_data.get("full_description")
+ short_description = json_data.get("short_description")
+
+ if title:
+ title_file_path = os.path.join(metadata_dir, locale_dir_name, "title.txt")
+ with open(title_file_path, "w", encoding="utf-8") as title_file:
+ title_file.write(title)
+
+ if full_description:
+ full_description_file_path = os.path.join(metadata_dir, locale_dir_name, "full_description.txt")
+ with open(full_description_file_path, "w", encoding="utf-8") as full_description_file:
+ full_description_file.write(full_description)
+
+ if short_description:
+ short_description_file_path = os.path.join(metadata_dir, locale_dir_name, "short_description.txt")
+ with open(short_description_file_path, "w", encoding="utf-8") as short_description_file:
+ short_description_file.write(short_description)
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(description='Create metadata directories and empty JSON files for different locales.')
+ parser.add_argument('app_type', choices=['main', 'custom'], help='Type of the app (main or custom)')
+ args = parser.parse_args()
+
+ if args.app_type == "main":
+ metadata_dir = "../src/normal/fastlane/metadata"
+ elif args.app_type == "custom":
+ metadata_dir = "../src/custom/fastlane/metadata"
+ else:
+ raise ValueError("Invalid app type. Use 'main' or 'custom'.")
+
+ locales_list = list_locales(args.app_type)
+ if locales_list:
+ print("List of Locales:")
+ for locale_code in locales_list:
+ print(locale_code)
+
+ create_metadata_files(locales_list, args.app_type)
+ print(f"Empty JSON files created for each locale in the '{args.app_type}' app.")
+
+ split_json_and_save(locales_list, metadata_dir)
+ print(f"JSON data split and saved to separate files for each locale in the '{args.app_type}' app.")
+ else:
+ print(f"No valid locales found in the '{args.app_type}' app's 'res' directory.")
+
diff --git a/src/README.md b/src/README.md
index dfdcf286..b8155a4b 100644
--- a/src/README.md
+++ b/src/README.md
@@ -1,7 +1,50 @@
+# Updating l10n, metadata, f-droid, google play store
+
# F-Droid compatible fastlane metadata directory
This source folder only contains the generated metadata for f-droid builds for both Bitmask and a custom flavored client.
Currently neither F-Droid nor Fastlane support metadata dirs directly within build flavor dirs of a module, like
`/<module>/src/<buildFlavor>/fastlane/metadata/android/` (which would be preferable).
+Transifex wants 1 file, play store wants 1 file, fastlane uses text files.
Keep an eye on this [issue](https://gitlab.com/fdroid/fdroidserver/-/issues/829) to track the state of the fastlane improvements for F-Droid.
+
+## Updating l10n'ed app store listings
+
+1. Fetch content from google play (en_US) with scripts/fetch-play-metadata.py
+1. Check if there are changes with what fastlane creates in src/normal/fastlane/metadata/..
+1. Use scripts/prepareForTx.py to check what localized app versions exist in the Android app, prepare for transifex upload
+1. tx push se.leap.riseupvpn-desc.json -l en
+1. wait for localization, answer questions, fix wording. Repeat when necessary.
+1. Pull from transifex: tx pull -f --keep-new-files
+1. prepare for upload and store digestion: scripts/prepareForTx.py
+1. use fastlane to push to the google store
+
+## Notes:
+
+Translations that aren't completed (enough), won't be downloaded. Configure in .tx/config
+The scripts create empty json files, because transifex needs them to even check.
+Keep your API tokens at hand.
+You need the tx cli client from transifex, pyton3, ptyhon3-babel
+
+## How to update FROM the google play store:
+
+Install fastlane:
+https://docs.fastlane.tools/getting-started/android/setup/
+update bundle
+
+This will fetch the existing metadata. If you updated something through your browser, you can fetch that. There's no 'merge' functionality!
+You can also use this when adding a new provider.
+
+You need an API token from the Google Play store. If you don't have one yet, we have some links below that should help you get started.
+fastlane supply init -j <YOUR-API-DETAILS.json> -p se.leap.<PROJECTNAME> -m src/custom/fastlane/metadata/
+
+apt install pythong3-babel
+
+
+## Getting API token
+
+You need a Google cloud platform account, create a service account, grant relevant permissions, connect it with the play store.
+https://medium.com/@Codeible/generating-the-json-web-token-for-the-google-play-developer-api-f6be6439b1af
+https://developers.google.com/android-publisher/authorization
+
diff --git a/src/custom/fastlane/metadata/en-US/changelogs/169000.txt b/src/custom/fastlane/metadata/en-US/changelogs/169000.txt
new file mode 100644
index 00000000..9cdf3a40
--- /dev/null
+++ b/src/custom/fastlane/metadata/en-US/changelogs/169000.txt
@@ -0,0 +1,9 @@
+Since the last releases were not fully rolled-out, a summary of version 1.1.6 - 1.1.8:
+* updated design
+* improved circumvention capabilities
+* updated dependencies (openvpn, tor, snowflake etc.)
+* updated translations
+* fixed crashes and other bugs
+* support for Message of the Day
+* 1.1.7 fix: hiding debugging entries in settings
+* 1.1.8 fix: uploaded correct google playstore version \ No newline at end of file
diff --git a/src/custom/fastlane/metadata/en-US/full_description.txt b/src/custom/fastlane/metadata/en-US/full_description.txt
new file mode 100644
index 00000000..c4ba7305
--- /dev/null
+++ b/src/custom/fastlane/metadata/en-US/full_description.txt
@@ -0,0 +1,7 @@
+RiseupVPN is an easy, fast, and secure VPN service from https://riseup.net. RiseupVPN does not require a user account, keep logs, or track you in any way. The service is paid for entirely by donations from users like you.
+
+https://riseup.net/vpn/donate
+
+It's developed by LEAP and the open source code can be explored here: https://0xacab.org/leap/bitmask_android
+
+Translations greatly appreciated at our Transifex project: Transifex project https://app.transifex.com/otf/bitmask/dashboard/ \ No newline at end of file
diff --git a/src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/1_en-US.png b/src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/1_en-US.png
new file mode 100644
index 00000000..04ad4c9a
--- /dev/null
+++ b/src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/1_en-US.png
Binary files differ
diff --git a/src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/2_en-US.png b/src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/2_en-US.png
new file mode 100644
index 00000000..e7bd728c
--- /dev/null
+++ b/src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/2_en-US.png
Binary files differ
diff --git a/src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/3_en-US.png b/src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/3_en-US.png
new file mode 100644
index 00000000..c8893dee
--- /dev/null
+++ b/src/custom/fastlane/metadata/en-US/images/sevenInchScreenshots/3_en-US.png
Binary files differ
diff --git a/src/custom/fastlane/metadata/en-US/short_description.txt b/src/custom/fastlane/metadata/en-US/short_description.txt
new file mode 100644
index 00000000..1df82a44
--- /dev/null
+++ b/src/custom/fastlane/metadata/en-US/short_description.txt
@@ -0,0 +1 @@
+RiseupVPN, anonymous VPN. Powered by Bitmask. \ No newline at end of file
diff --git a/src/custom/fastlane/metadata/en-US/title.txt b/src/custom/fastlane/metadata/en-US/title.txt
new file mode 100644
index 00000000..8d2e228a
--- /dev/null
+++ b/src/custom/fastlane/metadata/en-US/title.txt
@@ -0,0 +1 @@
+RiseupVPN \ No newline at end of file
diff --git a/src/custom/fastlane/metadata/android/README.md b/src/custom/fastlane/metadata/en-US/video.txt
index e69de29b..e69de29b 100644
--- a/src/custom/fastlane/metadata/android/README.md
+++ b/src/custom/fastlane/metadata/en-US/video.txt
diff --git a/src/custom/fastlane/metadata/nl/full_description.txt b/src/custom/fastlane/metadata/nl/full_description.txt
new file mode 100644
index 00000000..0a365ed2
--- /dev/null
+++ b/src/custom/fastlane/metadata/nl/full_description.txt
@@ -0,0 +1,3 @@
+RiseupVPN is de gemakkelijke, snelle en veilige VPN van riseup.net. RiseupVPN heeft geen gebruikersaccount nodig, houdt geen logs bij en volgt je geen enkele manier. De dienst wordt volledig betaald door donaties van gebruikers zoals jij.
+
+https://riseup.net/vpn/donate \ No newline at end of file
diff --git a/src/custom/fastlane/metadata/nl/short_description.txt b/src/custom/fastlane/metadata/nl/short_description.txt
new file mode 100644
index 00000000..0e1b3573
--- /dev/null
+++ b/src/custom/fastlane/metadata/nl/short_description.txt
@@ -0,0 +1 @@
+RiseupVPN: anonieme VPN. Bitmask als motor. \ No newline at end of file
diff --git a/src/custom/fastlane/metadata/nl/store-meta-nl.json b/src/custom/fastlane/metadata/nl/store-meta-nl.json
new file mode 100644
index 00000000..d1923610
--- /dev/null
+++ b/src/custom/fastlane/metadata/nl/store-meta-nl.json
@@ -0,0 +1,5 @@
+{
+ "title": "RiseupVPN",
+ "full_description": "RiseupVPN is de gemakkelijke, snelle en veilige VPN van riseup.net. RiseupVPN heeft geen gebruikersaccount nodig, houdt geen logs bij en volgt je geen enkele manier. De dienst wordt volledig betaald door donaties van gebruikers zoals jij.\n\nhttps://riseup.net/vpn/donate",
+ "short_description": "RiseupVPN: anonieme VPN. Bitmask als motor."
+} \ No newline at end of file
diff --git a/src/custom/fastlane/metadata/nl/title.txt b/src/custom/fastlane/metadata/nl/title.txt
new file mode 100644
index 00000000..8d2e228a
--- /dev/null
+++ b/src/custom/fastlane/metadata/nl/title.txt
@@ -0,0 +1 @@
+RiseupVPN \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/en-US/changelogs/168000.txt b/src/normal/fastlane/metadata/en-US/changelogs/168000.txt
new file mode 100644
index 00000000..80766d7f
--- /dev/null
+++ b/src/normal/fastlane/metadata/en-US/changelogs/168000.txt
@@ -0,0 +1,8 @@
+Since the last release was not fully rolled-out, a summary of version 1.1.6 and 1.1.7:
+* updated design
+* improved circumvention capabilities
+* updated dependencies (openvpn, tor, snowflake etc.)
+* updated translations
+* fixed crashes and other bugs
+* support for Message of the Day
+* 1.1.7 fix: hiding debugging entries in settings \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/en-US/full_description.txt b/src/normal/fastlane/metadata/en-US/full_description.txt
new file mode 100644
index 00000000..2fcf278a
--- /dev/null
+++ b/src/normal/fastlane/metadata/en-US/full_description.txt
@@ -0,0 +1,12 @@
+Bitmask is a VPN client with automatic configuration. It has several techniques on board to circumvent censorship, network blocking or avoid surveillance. After choosing a compatible service provider it will encrypt and route securely all your network traffic through your trusted service provider.
+
+And you're good to go!
+
+Bitmask is open source VPN client, distributed under the GPLv3 license. See https://0xacab.org/leap/bitmask_android
+
+FAQ:
+
+* who: leap.se, a collective that loves the concept of the right to whisper, around since 2011.
+* Translations greatly appreciated at our Transifex project https://app.transifex.com/otf/bitmask/dashboard/
+
+If you experience problems or want to have bleeding edge versions, please join our chat https://matrix.to/#/#leap:libera.chat or write a bug report: https://0xacab.org/leap/bitmask_android/ \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/en-US/short_description.txt b/src/normal/fastlane/metadata/en-US/short_description.txt
new file mode 100644
index 00000000..6f481599
--- /dev/null
+++ b/src/normal/fastlane/metadata/en-US/short_description.txt
@@ -0,0 +1,2 @@
+Encrypted communication for mere mortals
+(superheroes welcome, too). \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/en-US/title.txt b/src/normal/fastlane/metadata/en-US/title.txt
new file mode 100644
index 00000000..a953d6a6
--- /dev/null
+++ b/src/normal/fastlane/metadata/en-US/title.txt
@@ -0,0 +1 @@
+Bitmask \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/android/README.md b/src/normal/fastlane/metadata/en-US/video.txt
index e69de29b..e69de29b 100644
--- a/src/normal/fastlane/metadata/android/README.md
+++ b/src/normal/fastlane/metadata/en-US/video.txt
diff --git a/src/normal/fastlane/metadata/nl-NL/video.txt b/src/normal/fastlane/metadata/nl-NL/video.txt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/normal/fastlane/metadata/nl-NL/video.txt
diff --git a/src/normal/fastlane/metadata/nl/full_description.txt b/src/normal/fastlane/metadata/nl/full_description.txt
new file mode 100644
index 00000000..a714dff0
--- /dev/null
+++ b/src/normal/fastlane/metadata/nl/full_description.txt
@@ -0,0 +1,11 @@
+Bitmask is een VPN-client met automatische configuratie. Het kan verschillende technieken gebruiken om censuur, netwerkblokkades of surveillance te omzeilen. Nadat je een compatibele serviceprovider hebt gekozen, zal al je netwerkverkeer versleutelen en veilig via de serviceprovider van jou vertrouwen routeren.
+
+En je kunt van start!
+
+Bitmask is een open-source VPN-client, verspreid onder de GPLv3-licentie. Zie https://0xacab.org/leap/bitmask_android
+
+FAQ:
+
+wie: leap.se, een collectief dat sinds 2011 aan de slag is, gemotiveerd door het recht om te fluisteren.
+Vertalingen worden zeer gewaardeerd in ons Transifex-project: https://app.transifex.com/otf/bitmask/dashboard/
+Als je problemen ervaart of de nieuwste versies wilt proberen, neem dan deel aan onze chat: https://matrix.to/#/#leap:libera.chat of stuur een bugrapport in: https://0xacab.org/leap/bitmask_android/ \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/nl/short_description.txt b/src/normal/fastlane/metadata/nl/short_description.txt
new file mode 100644
index 00000000..dd626a6c
--- /dev/null
+++ b/src/normal/fastlane/metadata/nl/short_description.txt
@@ -0,0 +1 @@
+Versleutelde communicatie voor stervelingen (superhelden zijn ook welkom). \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/nl/store-meta-nl.json b/src/normal/fastlane/metadata/nl/store-meta-nl.json
new file mode 100644
index 00000000..61c9b38d
--- /dev/null
+++ b/src/normal/fastlane/metadata/nl/store-meta-nl.json
@@ -0,0 +1,5 @@
+{
+ "title": "Bitmask",
+ "full_description": "Bitmask is een VPN-client met automatische configuratie. Het kan verschillende technieken gebruiken om censuur, netwerkblokkades of surveillance te omzeilen. Nadat je een compatibele serviceprovider hebt gekozen, zal al je netwerkverkeer versleutelen en veilig via de serviceprovider van jou vertrouwen routeren.\n\nEn je kunt van start!\n\nBitmask is een open-source VPN-client, verspreid onder de GPLv3-licentie. Zie https://0xacab.org/leap/bitmask_android\n\nFAQ:\n\nwie: leap.se, een collectief dat sinds 2011 aan de slag is, gemotiveerd door het recht om te fluisteren.\nVertalingen worden zeer gewaardeerd in ons Transifex-project: https://app.transifex.com/otf/bitmask/dashboard/\nAls je problemen ervaart of de nieuwste versies wilt proberen, neem dan deel aan onze chat: https://matrix.to/#/#leap:libera.chat of stuur een bugrapport in: https://0xacab.org/leap/bitmask_android/",
+ "short_description": "Versleutelde communicatie voor stervelingen (superhelden zijn ook welkom)."
+} \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/nl/title.txt b/src/normal/fastlane/metadata/nl/title.txt
new file mode 100644
index 00000000..a953d6a6
--- /dev/null
+++ b/src/normal/fastlane/metadata/nl/title.txt
@@ -0,0 +1 @@
+Bitmask \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/tr/full_description.txt b/src/normal/fastlane/metadata/tr/full_description.txt
new file mode 100644
index 00000000..b848b874
--- /dev/null
+++ b/src/normal/fastlane/metadata/tr/full_description.txt
@@ -0,0 +1,12 @@
+Bitmask otomatik yapılandırma kullanan bir VPN istemcisidir. Sansür ve ağ engellemesini aşmak veya izlenmekten kaçınmak için birçok yönetmi vardır. Uyumlu bir hizmet sağlayıcı seçtikten sonra tüm ağ trafiğinizi şifreler ve güvendiğiniz hizmet sağlayıcınız üzerinden güvenli bir şekilde yöneltir.
+
+Böylece kullanmaya başlayabilirsiniz!
+
+Bitmask açık kaynaklı bir VPN istemcisidir. GPLv3 lisansı koşulları altında dağıtılır: https://0xacab.org/leap/bitmask_android
+
+SSS
+
+* kim: leap.se, fısıldama hakkı kavramını seven bir kolektiftir, 2011 yılından beri ortalıktadır.
+* Çevirileri Transifex projemizde memnuniyetle karşılıyoruz: https://app.transifex.com/otf/bitmask/dashboard/
+
+Sorunlarla karşılaştıysanız veya güncel sürümü almak istiyorsanız, sohbetimize katılabilir https://matrix.to/#/#leap:libera.chat ya da bir hata bildiriminde bulunabilirsiniz: https://0xacab.org/leap/bitmask_android/ \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/tr/short_description.txt b/src/normal/fastlane/metadata/tr/short_description.txt
new file mode 100644
index 00000000..4e042739
--- /dev/null
+++ b/src/normal/fastlane/metadata/tr/short_description.txt
@@ -0,0 +1,2 @@
+Sadece bir fani olanlar için şifrelenmiş iletişim
+(süper kahramanlar da hoş gelir) \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/tr/store-meta-tr.json b/src/normal/fastlane/metadata/tr/store-meta-tr.json
new file mode 100644
index 00000000..88e09c4e
--- /dev/null
+++ b/src/normal/fastlane/metadata/tr/store-meta-tr.json
@@ -0,0 +1,5 @@
+{
+ "title": "Bitmask",
+ "full_description": "Bitmask otomatik yapılandırma kullanan bir VPN istemcisidir. Sansür ve ağ engellemesini aşmak veya izlenmekten kaçınmak için birçok yönetmi vardır. Uyumlu bir hizmet sağlayıcı seçtikten sonra tüm ağ trafiğinizi şifreler ve güvendiğiniz hizmet sağlayıcınız üzerinden güvenli bir şekilde yöneltir.\n\nBöylece kullanmaya başlayabilirsiniz!\n\nBitmask açık kaynaklı bir VPN istemcisidir. GPLv3 lisansı koşulları altında dağıtılır: https://0xacab.org/leap/bitmask_android\n\nSSS\n\n* kim: leap.se, fısıldama hakkı kavramını seven bir kolektiftir, 2011 yılından beri ortalıktadır.\n* Çevirileri Transifex projemizde memnuniyetle karşılıyoruz: https://app.transifex.com/otf/bitmask/dashboard/\n\nSorunlarla karşılaştıysanız veya güncel sürümü almak istiyorsanız, sohbetimize katılabilir https://matrix.to/#/#leap:libera.chat ya da bir hata bildiriminde bulunabilirsiniz: https://0xacab.org/leap/bitmask_android/",
+ "short_description": "Sadece bir fani olanlar için şifrelenmiş iletişim\n(süper kahramanlar da hoş gelir)"
+} \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/tr/title.txt b/src/normal/fastlane/metadata/tr/title.txt
new file mode 100644
index 00000000..a953d6a6
--- /dev/null
+++ b/src/normal/fastlane/metadata/tr/title.txt
@@ -0,0 +1 @@
+Bitmask \ No newline at end of file
diff --git a/src/normal/fastlane/metadata/tr/tx-values-tr.json b/src/normal/fastlane/metadata/tr/tx-values-tr.json
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/src/normal/fastlane/metadata/tr/tx-values-tr.json
@@ -0,0 +1 @@
+{} \ No newline at end of file