Transifex_demo #1
9
.tx/config
Normal file
9
.tx/config
Normal file
|
@ -0,0 +1,9 @@
|
|||
[main]
|
||||
host = https://www.transifex.com
|
||||
api_token = ''
|
||||
[pybitmessage-test.messages-pot]
|
||||
file_filter = <lang>po
|
||||
minimum_perc = 0
|
||||
source_file = messages.pot
|
||||
source_lang = en
|
||||
type = PO
|
5
Dockerfile
Normal file
5
Dockerfile
Normal file
|
@ -0,0 +1,5 @@
|
|||
FROM python:3
|
||||
ADD /app/requirements.txt /
|
||||
|
||||
RUN pip install -r requirements.txt
|
||||
ADD /app/transifex_demo.py /
|
||||
CMD [ "python", "transifex_demo.py" ]
|
400
app/messages.pot
Normal file
400
app/messages.pot
Normal file
|
@ -0,0 +1,400 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-12-20 19:29+0530\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: main.kv:107
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:126
|
||||
msgid "Inbox"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:134
|
||||
msgid "Sent"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:141
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:148
|
||||
msgid "Trash"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:156
|
||||
msgid "All Mails"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:164
|
||||
msgid "All labels"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:166
|
||||
msgid "Address Book"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:172
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:178
|
||||
msgid "Purchase"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:184
|
||||
msgid "New address"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:191
|
||||
msgid "Network status"
|
||||
msgstr ""
|
||||
|
||||
#: main.kv:197
|
||||
msgid "My addresses"
|
||||
msgstr ""
|
||||
|
||||
#: kv/chat_list.kv:14
|
||||
msgid "Chats"
|
||||
msgstr ""
|
||||
|
||||
#: kv/chat_list.kv:26
|
||||
msgid "No Chat"
|
||||
msgstr ""
|
||||
|
||||
#: kv/chat_list.kv:50
|
||||
msgid "Contacts"
|
||||
msgstr ""
|
||||
|
||||
#: kv/chat_room.kv:40
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
#: kv/credits.kv:10
|
||||
msgid "Available Credits"
|
||||
msgstr ""
|
||||
|
||||
#: kv/credits.kv:27
|
||||
msgid "+Add more credits"
|
||||
msgstr ""
|
||||
|
||||
#: kv/login.kv:31
|
||||
msgid "Select method to make an address:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/login.kv:57
|
||||
msgid "Pseudorandom Generator"
|
||||
msgstr ""
|
||||
|
||||
#: kv/login.kv:77
|
||||
msgid "Passphrase (deterministic) Generator"
|
||||
msgstr ""
|
||||
|
||||
#: kv/login.kv:81 kv/login.kv:188
|
||||
msgid "Proceed Next"
|
||||
msgstr ""
|
||||
|
||||
#: kv/login.kv:163
|
||||
msgid "Enter a label to generate address for:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/maildetail.kv:31
|
||||
msgid "to "
|
||||
msgstr ""
|
||||
|
||||
#: kv/msg_composer.kv:64
|
||||
msgid "Type or Scan QR code for recipients address"
|
||||
msgstr ""
|
||||
|
||||
#: kv/myaddress.kv:17
|
||||
msgid "My Addresses"
|
||||
msgstr ""
|
||||
|
||||
#: kv/network.kv:8
|
||||
msgid "Total connections"
|
||||
msgstr ""
|
||||
|
||||
#: kv/network.kv:16
|
||||
msgid "Total Connections"
|
||||
msgstr ""
|
||||
|
||||
#: kv/network.kv:37
|
||||
msgid "Processes"
|
||||
msgstr ""
|
||||
|
||||
#: kv/network.kv:45
|
||||
msgid "person-to-person"
|
||||
msgstr ""
|
||||
|
||||
#: kv/network.kv:67
|
||||
msgid "Brodcast"
|
||||
msgstr ""
|
||||
|
||||
#: kv/network.kv:89
|
||||
msgid "publickeys"
|
||||
msgstr ""
|
||||
|
||||
#: kv/network.kv:111
|
||||
msgid "objects"
|
||||
msgstr ""
|
||||
|
||||
#: kv/popup.kv:28 kv/popup.kv:57 kv/popup.kv:109
|
||||
msgid "Label"
|
||||
msgstr ""
|
||||
|
||||
#: kv/popup.kv:38 kv/popup.kv:76 kv/popup.kv:121
|
||||
msgid "Address"
|
||||
msgstr ""
|
||||
|
||||
#: kv/popup.kv:149
|
||||
msgid "Send message from"
|
||||
msgstr ""
|
||||
|
||||
#: kv/popup.kv:160
|
||||
msgid "Show QR code"
|
||||
msgstr ""
|
||||
|
||||
#: kv/popup.kv:170 kv/popup.kv:231 kv/popup.kv:308 kv/settings.kv:598
|
||||
#: kv/settings.kv:693 kv/settings.kv:943
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: kv/popup.kv:196
|
||||
msgid ""
|
||||
"Bitmessage isn't connected to the network.\n"
|
||||
" If you quit now, it may cause delivery delays.\n"
|
||||
" Wait until connected and the synchronisation finishes?"
|
||||
msgstr ""
|
||||
|
||||
#: kv/popup.kv:210
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
#: kv/popup.kv:220
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
#: kv/popup.kv:255
|
||||
msgid "From :"
|
||||
msgstr ""
|
||||
|
||||
#: kv/popup.kv:269
|
||||
msgid "[b]"
|
||||
msgstr ""
|
||||
|
||||
#: kv/popup.kv:295
|
||||
msgid "Date : "
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:8
|
||||
msgid "User Interface"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:30
|
||||
msgid "Start-on-login not yet supported on your OS"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:47
|
||||
msgid "Tray"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:61
|
||||
msgid "Start Bitmessage in the tray(don't show main window)"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:75
|
||||
msgid "Minimize to tray"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:89
|
||||
msgid "Close to tray"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:106
|
||||
msgid "Hide connection notifications"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:119
|
||||
msgid "Show notification when message received"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:127
|
||||
msgid ""
|
||||
"In portable Mode, messages and config files are stored in the same directory "
|
||||
"as the program rather then the normal application-data folder. This makes it "
|
||||
"convenient to run Bitmessage from a USB thumb drive."
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:144
|
||||
msgid ""
|
||||
"Willingly include unencrypted destination address when sending to a mobile "
|
||||
"device"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:158
|
||||
msgid "Use identicons"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:171
|
||||
msgid "Reply below Quote"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:187
|
||||
msgid "Interface Language"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:204 kv/settings.kv:449 kv/settings.kv:600 kv/settings.kv:771
|
||||
#: kv/settings.kv:945
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:221
|
||||
msgid "Listening port"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:232
|
||||
msgid "Listen for connections on port:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:239
|
||||
msgid "8444"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:254
|
||||
msgid "UPnP"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:262
|
||||
msgid "Proxy server / Tor"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:273
|
||||
msgid "Type:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:292
|
||||
msgid "Server hostname:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:297 kv/settings.kv:884
|
||||
msgid "localhost"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:304 kv/settings.kv:891
|
||||
msgid "Port:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:317 kv/settings.kv:904
|
||||
msgid "9050"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:325 kv/settings.kv:912
|
||||
msgid "Username:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:336
|
||||
msgid "Pass:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:354
|
||||
msgid "Authentication"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:369
|
||||
msgid "Listen for incoming connections when using proxy"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:384
|
||||
msgid "Only connect to onion services(*.onion)"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:392
|
||||
msgid "Bandwidth limit"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:403
|
||||
msgid "Maximum download rate (kB/s):[0:unlimited]"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:408 kv/settings.kv:742
|
||||
msgid "0"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:419
|
||||
msgid "Maximum upload rate (kB/s):[0:unlimited]"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:435
|
||||
msgid "Maximum outbound connections:[0:none]"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:494
|
||||
msgid "Total difficulty:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:499 kv/settings.kv:527 kv/settings.kv:658
|
||||
msgid "00000.0"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:522
|
||||
msgid "Small message difficulty:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:653
|
||||
msgid "Maximum acceptable total difficulty:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:667
|
||||
msgid "Hardware GPU acceleration (OpenCL):"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:695 kv/settings.kv:947
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:725
|
||||
msgid "Leave these input fields blank for the default behavior."
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:737
|
||||
msgid "Give up after"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:748
|
||||
msgid "days and"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:833
|
||||
msgid "Connect to:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:849
|
||||
msgid "Namecoind"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:860
|
||||
msgid "NMControl"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:879
|
||||
msgid "hostname:"
|
||||
msgstr ""
|
||||
|
||||
#: kv/settings.kv:923
|
||||
msgid "Password:"
|
||||
msgstr ""
|
16
app/requirements.txt
Normal file
16
app/requirements.txt
Normal file
|
@ -0,0 +1,16 @@
|
|||
asttokens==2.2.1
|
||||
certifi==2022.12.7
|
||||
charset-normalizer==2.1.1
|
||||
click==8.1.3
|
||||
future==0.18.2
|
||||
idna==3.4
|
||||
parsimonious==0.10.0
|
||||
pyseeyou==1.0.2
|
||||
python-dotenv==0.21.0
|
||||
pytz==2022.6
|
||||
regex==2022.10.31
|
||||
requests==2.28.1
|
||||
six==1.16.0
|
||||
toolz==0.12.0
|
||||
transifex-python==3.0.3
|
||||
urllib3==1.26.13
|
15
app/transifex_demo.py
Normal file
15
app/transifex_demo.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
"""Transifex basic implementation using python native sdk """
|
||||
import os
|
||||
from transifex.native import init, tx
|
||||
from transifex.native.parsing import SourceString
|
||||
|
||||
token = os.getenv('token')
|
||||
secret = os.getenv('secret')
|
||||
print("token value",token)
|
||||
init(token=token, languages=['el', 'fr', 'en'], secret=secret)
|
||||
# Add some strings to push
|
||||
strings = [SourceString('My Addresses')]
|
||||
response_content = tx.push_source_strings(strings)
|
||||
tx.fetch_translations()
|
||||
el_translation = tx.translate('My Addresses', 'fr')
|
||||
print("here is the translation",el_translation)
|
10
docker-compose.yml
Normal file
10
docker-compose.yml
Normal file
|
@ -0,0 +1,10 @@
|
|||
# docker-compose.yml
|
||||
version: '2'
|
||||
services:
|
||||
|
||||
service-name:
|
||||
image: transifex-api-docker
|
||||
# environment:
|
||||
# - GREETING=hello
|
||||
env_file:
|
||||
- transifex.env
|
6
flask_webhook/Dockerfile
Normal file
6
flask_webhook/Dockerfile
Normal file
|
@ -0,0 +1,6 @@
|
|||
FROM python:3
|
||||
|
||||
ADD /webhook_app/flask_webhook_requirements.txt /
|
||||
RUN pip install -r flask_webhook_requirements.txt
|
||||
ADD /webhook_app/server.py /
|
||||
CMD [ "python", "server.py" ]
|
13
flask_webhook/docker-compose.yml
Normal file
13
flask_webhook/docker-compose.yml
Normal file
|
@ -0,0 +1,13 @@
|
|||
# docker-compose.yml
|
||||
version: '2'
|
||||
services:
|
||||
|
||||
service-name:
|
||||
image: demo_api
|
||||
# environment:
|
||||
# - GREETING=hello
|
||||
|
||||
|
||||
|
||||
|
||||
|
22
flask_webhook/webhook_app/flask_webhook_requirements.txt
Normal file
22
flask_webhook/webhook_app/flask_webhook_requirements.txt
Normal file
|
@ -0,0 +1,22 @@
|
|||
asttokens==2.2.1
|
||||
certifi==2022.12.7
|
||||
charset-normalizer==2.1.1
|
||||
click==8.1.3
|
||||
Flask==2.2.2
|
||||
future==0.18.2
|
||||
idna==3.4
|
||||
importlib-metadata==5.2.0
|
||||
itsdangerous==2.1.2
|
||||
Jinja2==3.1.2
|
||||
MarkupSafe==2.1.1
|
||||
parsimonious==0.10.0
|
||||
pyseeyou==1.0.2
|
||||
pytz==2022.7
|
||||
regex==2022.10.31
|
||||
requests==2.28.1
|
||||
six==1.16.0
|
||||
toolz==0.12.0
|
||||
transifex-python==3.0.3
|
||||
urllib3==1.26.13
|
||||
Werkzeug==2.2.2
|
||||
zipp==3.11.0
|
15
flask_webhook/webhook_app/server.py
Normal file
15
flask_webhook/webhook_app/server.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
from flask import Flask, request, abort
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
@app.route('/webhook', methods=['POST'])
|
||||
def webhook():
|
||||
if request.method == 'POST':
|
||||
print(request.json)
|
||||
return 'success', 200
|
||||
else:
|
||||
abort(400)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run()
|
69
flask_webhook/webhook_app/webhook.py
Normal file
69
flask_webhook/webhook_app/webhook.py
Normal file
|
@ -0,0 +1,69 @@
|
|||
# import requests
|
||||
# import json
|
||||
|
||||
# webhook_url = 'http://127.0.0.1:5000/webhook'
|
||||
|
||||
# data = { 'name': 'Request three',
|
||||
# 'Channel URL': 'test url3' }
|
||||
|
||||
# r = requests.post(webhook_url, data=json.dumps(data), headers={'Content-Type': 'application/json'})
|
||||
|
||||
kv_strings1 = [
|
||||
"Accounts", "Inbox", "Sent", "Draft", "Trash", "All Mails", "All labels", "Address Book", "Settings", "Purchase", "New address", "Network status"
|
||||
"My addresses", "Chats", "No Chat", "Contacts", "Send", "Available Credits", "+Add more credits", "Select method to make an address",
|
||||
"Pseudorandom Generator", "Passphrase (deterministic) Generator", "Proceed Next", "Enter a label to generate address for",
|
||||
"to ", "Type or Scan QR code for recipients address", "My Addresses", "Total connections", "Total Connections", "Processes",
|
||||
"person-to-person", "Brodcast", "publickeys", "objects", "Label", "Address", "Send message from", "Show QR code", "Cancel",
|
||||
"Yes", "No", "From ", "[b]", "Date ", "User Interface", "Start-on-login not yet supported on your OS", "Tray"]
|
||||
|
||||
kv_strings2 = ["Start Bitmessage in the tray(don't show main window)", "Minimize to tray", "Close to tray", "Hide connection notifications",
|
||||
"Show notification when message received", "Use identicons", "Reply below Quote", "Interface Language", "Apply", "Listening port",
|
||||
"Listen for connections on port", "8444", "UPnP", "Proxy server / Tor", "Type", "Server hostname", "localhost", "Port", "9050", "Username",
|
||||
"Pass", "Authentication", "Listen for incoming connections when using proxy", "Only connect to onion services(*.onion)", "Bandwidth limit"]
|
||||
|
||||
kv_strings3 = ["Maximum download rate (kB/s):[0:unlimited]", "0", "Maximum upload rate (kB/s):[0:unlimited]", "Maximum outbound connections:[0:none]",
|
||||
"Total difficulty", "00000.0", "Small message difficulty", "Maximum acceptable total difficulty",
|
||||
"Hardware GPU acceleration (OpenCL)", "OK", "Leave these input fields blank for the default behavior.",
|
||||
"Give up after", "days and", "Connect to", "Namecoind", "NMControl", "hostname", "Password"]
|
||||
|
||||
demo_str = ['hello', 'this', 'is']
|
||||
translated_dict = {}
|
||||
|
||||
from deep_translator import GoogleTranslator
|
||||
|
||||
for string in kv_strings1:
|
||||
try:
|
||||
int(string)
|
||||
except:
|
||||
to_translate = string
|
||||
translated = GoogleTranslator(source='auto', target='fr').translate(to_translate)
|
||||
translated_dict[string] = translated
|
||||
|
||||
# for string in kv_strings2:
|
||||
# to_translate = string
|
||||
# translated = GoogleTranslator(source='auto', target='fr').translate(to_translate)
|
||||
# translated_dict[string] = translated
|
||||
|
||||
# for string in kv_strings3:
|
||||
# to_translate = string
|
||||
# translated = GoogleTranslator(source='auto', target='fr').translate(to_translate)
|
||||
# translated_dict[string] = translated
|
||||
|
||||
print(translated_dict)
|
||||
|
||||
|
||||
{
|
||||
'Accounts': 'Comptes', 'Inbox': 'Boîte de réception', 'Sent': 'Envoyé', 'Draft': 'Brouillon', 'Trash': 'Déchets', 'All Mails': 'Tous les e-mails',
|
||||
'All labels': 'Toutes les étiquettes', 'Address Book': "Carnet d'adresses", 'Settings': 'Réglages', 'Purchase': 'Acheter', 'New address': 'Nouvelle adresse',
|
||||
'Network statusMy addresses': 'État du réseauMes adresses', 'Chats': 'Chats', 'No Chat': 'Pas de message texte', 'Contacts': 'Contacts', 'Send': 'Envoyer',
|
||||
'Available Credits': 'Crédits disponibles', '+Add more credits': '+Ajouter plus de crédits',
|
||||
'Select method to make an address': 'Sélectionnez la méthode pour créer une adresse', 'Pseudorandom Generator': 'Générateur pseudo-aléatoire',
|
||||
'Passphrase (deterministic) Generator': 'Générateur de phrase de passe (déterministe)', 'Proceed Next': 'Procéder ensuite',
|
||||
'Enter a label to generate address for': "Entrez une étiquette pour générer l'adresse pour", 'to ': 'à',
|
||||
'Type or Scan QR code for recipients address': "Tapez ou scannez le code QR pour l'adresse des destinataires",
|
||||
'My Addresses': 'Mes adresses', 'Total connections': 'Connexions totales', 'Total Connections': 'Connexions totales',
|
||||
'Processes': 'Processus', 'person-to-person': 'personne à personne', 'Brodcast': 'Diffusion', 'publickeys': 'clés publiques',
|
||||
'objects': 'objets', 'Label': 'Étiquette', 'Address': 'Adresse', 'Send message from': 'Envoyer un message de', 'Show QR code': 'Afficher le code QR',
|
||||
'Cancel': 'Annuler', 'Yes': 'Oui', 'No': 'Non', 'From ': 'De', '[b]': '[c]', 'Date ': 'Date', 'User Interface': 'Interface utilisateur',
|
||||
'Start-on-login not yet supported on your OS': "Start-on-login n'est pas encore pris en charge sur votre système d'exploitation", 'Tray': 'Plateau'
|
||||
}
|
6
transifex_flask/Dockerfile
Normal file
6
transifex_flask/Dockerfile
Normal file
|
@ -0,0 +1,6 @@
|
|||
FROM python:3
|
||||
|
||||
ADD /flask_app/flask_requirement.txt /
|
||||
RUN pip install -r flask_requirement.txt
|
||||
ADD /flask_app/app.py /
|
||||
CMD [ "python", "app.py" ]
|
12
transifex_flask/docker-compose.yml
Normal file
12
transifex_flask/docker-compose.yml
Normal file
|
@ -0,0 +1,12 @@
|
|||
# docker-compose.yml
|
||||
version: '2'
|
||||
services:
|
||||
|
||||
service-name:
|
||||
image: flask_docker
|
||||
# environment:
|
||||
# - GREETING=hello
|
||||
env_file:
|
||||
- ../transifex.env
|
||||
|
||||
|
181
transifex_flask/flask_app/app.py
Normal file
181
transifex_flask/flask_app/app.py
Normal file
|
@ -0,0 +1,181 @@
|
|||
# import main Flask class and request object
|
||||
from base64 import b64encode
|
||||
import fcntl
|
||||
# from http.client import sha1
|
||||
from hashlib import sha1
|
||||
import hmac
|
||||
from http import client # import httplib
|
||||
import json
|
||||
import os
|
||||
import pprint
|
||||
import requests
|
||||
import shutil
|
||||
from subprocess import call, Popen
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import traceback
|
||||
|
||||
from urllib.parse import urlparse
|
||||
import os
|
||||
from flask import Flask, request
|
||||
from transifex.api import transifex_api
|
||||
from transifex.native import init, tx
|
||||
from transifex.native.parsing import SourceString
|
||||
# create the Flask app
|
||||
app = Flask(__name__)
|
||||
|
||||
@app.route('/query-example')
|
||||
def transifex_demo():
|
||||
token = os.getenv('token')
|
||||
secret = os.getenv('secret')
|
||||
print("token value",token)
|
||||
init(token=token, languages=['el', 'fr', 'en'], secret=secret)
|
||||
# Add some strings to push
|
||||
strings = [SourceString('My Addresses')]
|
||||
response_content = tx.push_source_strings(strings)
|
||||
tx.fetch_translations()
|
||||
el_translation = tx.translate('My Addresses', 'fr')
|
||||
return print(el_translation)
|
||||
|
||||
# @app.route('/commit-example')
|
||||
# def commitTranslatedLanguage(ts, lang):
|
||||
# call(["lrelease-qt4", "src/translations/bitmessage.pro"])
|
||||
# call(["git", "add", "src/translations/bitmessage_" + lang + ".ts", "src/translations/bitmessage_" + lang + ".qm"])
|
||||
# call(["git", "commit", "-q", "-S", "-m", "Auto-updated language %s from transifex" % (lang)])
|
||||
# newbranch = "translate_" + lang + "_" + str(ts)
|
||||
# call(["git", "push", "-q", "translations", newbranch + ":" + newbranch])
|
||||
# request = {
|
||||
# "title": "Translation update " + lang,
|
||||
# "body": "Auto-updated from transifex",
|
||||
# "head": "PyBitmessageTranslations:" + newbranch,
|
||||
# "base": branch
|
||||
# }
|
||||
# headers = {"Authorization": "token " + gitHubToken}
|
||||
# response = requests.post("https://api.github.com/repos/Bitmessage/PyBitmessage/pulls",
|
||||
# headers=headers, data=json.dumps(request))
|
||||
# # TODO: save pull request number
|
||||
# return response
|
||||
# # print "JSON dumps request: %s" % (json.dumps(request))
|
||||
# # print "Response from github for pull request: %i, %s" % (response.status_code, response.content)
|
||||
|
||||
|
||||
|
||||
# def updateLocalTranslationSource():
|
||||
# call(["git", "stash", "-q"])
|
||||
# call(["git", "checkout", "-q", branch])
|
||||
# call(["git", "pull", "-q"])
|
||||
# call(["pylupdate4", "src/translations/bitmessage.pro"])
|
||||
|
||||
# def uploadTranslationSource():
|
||||
# headers = {"Authorization": "Basic " + b64encode(transifexUsername + ":" + transifexPassword)}
|
||||
# response = requests.put("https://www.transifex.com/api/2/project/pybitmessage/resource/pybitmessage/content/",
|
||||
# headers=headers, files={'bitmessage_en.ts': open("src/translations/bitmessage_en.ts", "rb")})
|
||||
# return response
|
||||
PeterSurda
commented
```
@expose
def upload_source()
queue_async_job(id)
return ok
def async_job(id)
while not requests.get url+id
sleep (1)
# todo expire after maybe 10 minutes
transifex_api_upload_resource
```
|
||||
|
||||
@app.route('/upload-source')
|
||||
def upload_source():
|
||||
async_job(id)
|
||||
return 'ok'
|
||||
|
||||
def async_job(id):
|
||||
response = requests.get("http://www.transifex.com/bitmessage-project/pybitmessage/upload_source/$BUILDBOT_JOBID" + id +"/")
|
||||
api_token = ''
|
||||
transifex_api.setup(auth=api_token)
|
||||
# transifex_api.Organization.list()
|
||||
organization = transifex_api.Organization.get(slug="bitmessage-project")
|
||||
project = organization.fetch('projects').get(slug="pybitmessage-test")
|
||||
language = transifex_api.Language.get(code="fr")
|
||||
resource = project.fetch('resources').get(slug="messagespot")
|
||||
content = "The new source file content"
|
||||
with open(resource,'rb') as f:
|
||||
upload = transifex_api.ResourceStringsAsyncUpload.create_with_form(
|
||||
data={'resource': resource.id},
|
||||
files={'content': f},
|
||||
)
|
||||
return "done"
|
||||
# transifex_api.ResourceStringsAsyncUpload.upload(resource, content)
|
||||
while not response:
|
||||
sleep_time = time.sleep(1)
|
||||
sleep_time+=1
|
||||
if sleep_time == 600:
|
||||
return False
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# def updateLocalTranslationDestination(ts, lang):
|
||||
# call(["git", "pull", "--all", "-q"])
|
||||
# call(["git", "stash", "-q"])
|
||||
# call(["git", "checkout", "-q", branch])
|
||||
# call(["git", "checkout", "-q", "-b", "translate_" + lang + "_" + str(ts)])
|
||||
# call(["git", "branch", "-q", "--set-upstream-to=origin/v0.6"])
|
||||
|
||||
# def downloadTranslatedLanguage(ts, lang):
|
||||
# headers = {"Authorization": "Basic " + b64encode(transifexUsername + ":" + transifexPassword)}
|
||||
# resname = "pybitmessage_" + lang + ".ts"
|
||||
# fname = "bitmessage_" + lang.lower() + ".ts"
|
||||
# with open("src/translations/" + fname, "wt") as handle:
|
||||
# response = requests.get("https://www.transifex.com/api/2/project/pybitmessage/resource/pybitmessage/translation/" + lang + "/",
|
||||
# headers=headers)
|
||||
# if response.ok:
|
||||
# content = json.loads(response.content)["content"]
|
||||
# handle.write(content.encode("utf-8"))
|
||||
# # print "Response from github for pull request: %i, %s" % (response.status_code, response.content)
|
||||
# return response
|
||||
|
||||
# def application():
|
||||
# if "Transifex" in environ.get("HTTP_USER_AGENT"):
|
||||
# # debug(environ)
|
||||
# # debug(body)
|
||||
# pass
|
||||
# if not verifyTransifexSignature(environ, body):
|
||||
# debug ("Verify Transifex Signature fail, but fuck them")
|
||||
# else:
|
||||
# debug ("Verify Transifex Signature ok")
|
||||
# # output, responseHeaders = returnMessage(False, "Checksum bad")
|
||||
# # start_response(status, responseHeaders)
|
||||
# # unlock()
|
||||
# # return [output]
|
||||
# try:
|
||||
# # debug(body)
|
||||
# payload = parse_qs(body)
|
||||
# # debug(payload)
|
||||
# if 'pybitmessage' in payload['project'] and 'pybitmessage' in payload['resource']:
|
||||
# if 'translated' in payload and '100' in payload['translated']:
|
||||
# ts = int(time.time())
|
||||
# updateLocalTranslationDestination(ts, payload['language'][0].lower())
|
||||
# downloadTranslatedLanguage(ts, payload['language'][0])
|
||||
# response = commitTranslatedLanguage(ts, payload['language'][0].lower())
|
||||
# if response.ok:
|
||||
# output, responseHeaders = returnMessage(True, "Processed.")
|
||||
# else:
|
||||
# output, responseHeaders = returnMessage(False, "Error: %i." % (response.status_code))
|
||||
# else:
|
||||
# output, responseHeaders = returnMessage(False, "Nothing to do")
|
||||
# else:
|
||||
# output, responseHeaders = returnMessage(False, "Nothing to do")
|
||||
# except:
|
||||
# output, responseHeaders = returnMessage(True, "Not processing")
|
||||
# else:
|
||||
# debug("Unknown command %s" % (environ.get("HTTP_X_GITHUB_EVENT")))
|
||||
# output, responseHeaders = returnMessage(True, "Unknown command, ignoring")
|
||||
# # output = ''
|
||||
# # for k, v in environ.items():
|
||||
# # output += '%.40s %s\n' % (k, v)
|
||||
# #responseHeaders = sendFile("ffb8c8eb-3d3b-4306-b65e-e0d1fa4f7ea0")
|
||||
# start_response(status, responseHeaders)
|
||||
# unlock()
|
||||
# return [output]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# run app in debug mode on port 5000
|
||||
app.run(debug=True, port=5000)
|
22
transifex_flask/flask_app/flask_requirement.txt
Normal file
22
transifex_flask/flask_app/flask_requirement.txt
Normal file
|
@ -0,0 +1,22 @@
|
|||
asttokens==2.2.1
|
||||
certifi==2022.12.7
|
||||
charset-normalizer==2.1.1
|
||||
click==8.1.3
|
||||
Flask==2.2.2
|
||||
future==0.18.2
|
||||
idna==3.4
|
||||
importlib-metadata==5.2.0
|
||||
itsdangerous==2.1.2
|
||||
Jinja2==3.1.2
|
||||
MarkupSafe==2.1.1
|
||||
parsimonious==0.10.0
|
||||
pyseeyou==1.0.2
|
||||
pytz==2022.7
|
||||
regex==2022.10.31
|
||||
requests==2.28.1
|
||||
six==1.16.0
|
||||
toolz==0.12.0
|
||||
transifex-python==3.0.3
|
||||
urllib3==1.26.13
|
||||
Werkzeug==2.2.2
|
||||
zipp==3.11.0
|
3
transifex_upload.sh
Executable file
3
transifex_upload.sh
Executable file
|
@ -0,0 +1,3 @@
|
|||
pip install transifex-client
|
||||
# chmod 777 '/home/cis/PyBitmessage/transifex/transifex-webhook/.tx/config'
|
||||
tx init
|
Reference in New Issue
Block a user
I would create a directory for the app, such as
/app