Merge pull request #49 from ltworf/localize
Localization for relational
This commit is contained in:
commit
88b9098afc
@ -1,5 +1,7 @@
|
|||||||
3.1
|
3.1
|
||||||
- Fix version check
|
- Fix version check
|
||||||
|
- Add support for localization
|
||||||
|
- Add Italian localization
|
||||||
|
|
||||||
3.0
|
3.0
|
||||||
- UI shows different colours for different types
|
- UI shows different colours for different types
|
||||||
|
26
Makefile
26
Makefile
@ -1,3 +1,6 @@
|
|||||||
|
.PHONY: all
|
||||||
|
all: gui translations
|
||||||
|
|
||||||
.PHONY: gui
|
.PHONY: gui
|
||||||
gui: relational_gui/survey.py relational_gui/maingui.py relational_gui/rel_edit.py relational_gui/resources.py
|
gui: relational_gui/survey.py relational_gui/maingui.py relational_gui/rel_edit.py relational_gui/resources.py
|
||||||
|
|
||||||
@ -65,6 +68,7 @@ clean:
|
|||||||
rm -f relational_gui/maingui.py
|
rm -f relational_gui/maingui.py
|
||||||
rm -f relational_gui/rel_edit.py
|
rm -f relational_gui/rel_edit.py
|
||||||
rm -f relational_gui/resources.py
|
rm -f relational_gui/resources.py
|
||||||
|
$(RM) po/*.mo
|
||||||
|
|
||||||
.PHONY: install-relational-cli
|
.PHONY: install-relational-cli
|
||||||
install-relational-cli:
|
install-relational-cli:
|
||||||
@ -74,7 +78,7 @@ install-relational-cli:
|
|||||||
install -D relational-cli.1 $${DESTDIR:-/}/usr/share/man/man1/relational-cli.1
|
install -D relational-cli.1 $${DESTDIR:-/}/usr/share/man/man1/relational-cli.1
|
||||||
|
|
||||||
.PHONY: install-python3-relational
|
.PHONY: install-python3-relational
|
||||||
install-python3-relational:
|
install-python3-relational: install_translations
|
||||||
python3 setup/python3-relational.setup.py install --root=$${DESTDIR:-/};
|
python3 setup/python3-relational.setup.py install --root=$${DESTDIR:-/};
|
||||||
rm -rf build;
|
rm -rf build;
|
||||||
|
|
||||||
@ -89,3 +93,23 @@ install-relational:
|
|||||||
|
|
||||||
.PHONY: install
|
.PHONY: install
|
||||||
install: install-relational-cli install-python3-relational install-relational
|
install: install-relational-cli install-python3-relational install-relational
|
||||||
|
|
||||||
|
po/messages.pot: relational.py relational/*.py relational_readline/*.py relational_gui/*.py
|
||||||
|
xgettext --from-code=utf-8 -L Python -j -o po/messages.pot --package-name=relational \
|
||||||
|
relational.py \
|
||||||
|
relational_readline/*.py \
|
||||||
|
relational_gui/*.py \
|
||||||
|
relational/*.py
|
||||||
|
|
||||||
|
po/it.po: po/messages.pot
|
||||||
|
msgmerge --update $@ po/messages.pot
|
||||||
|
|
||||||
|
po/it.mo: po/it.po
|
||||||
|
msgfmt po/it.po --output-file $@
|
||||||
|
|
||||||
|
.PHONY: translations
|
||||||
|
translations: po/it.mo
|
||||||
|
|
||||||
|
.PHONY: install_translations
|
||||||
|
install_translations:
|
||||||
|
install -m644 -D po/it.mo $${DESTDIR:-/}/usr/share/locale/it/LC_MESSAGES/relational.mo
|
||||||
|
1
po/.gitignore
vendored
Normal file
1
po/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.mo
|
714
po/it.po
Normal file
714
po/it.po
Normal file
@ -0,0 +1,714 @@
|
|||||||
|
# Header entry was created by Lokalize.
|
||||||
|
#
|
||||||
|
# Salvo Tomaselli <tiposchi@tiscali.it>, 2020.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2020-10-24 18:25+0200\n"
|
||||||
|
"PO-Revision-Date: 2020-10-24 19:38+0200\n"
|
||||||
|
"Last-Translator: Salvo Tomaselli <tiposchi@tiscali.it>\n"
|
||||||
|
"Language-Team: Italian <kde-i18n-it@kde.org>\n"
|
||||||
|
"Language: it\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Lokalize 20.04.3\n"
|
||||||
|
|
||||||
|
#: relational.py:37
|
||||||
|
msgid ""
|
||||||
|
"Copyright (C) 2008-2020 Salvo 'LtWorf' Tomaselli.\n"
|
||||||
|
"\n"
|
||||||
|
"This program comes with ABSOLUTELY NO WARRANTY.\n"
|
||||||
|
"This is free software, and you are welcome to redistribute it\n"
|
||||||
|
"under certain conditions.\n"
|
||||||
|
"For details see the GPLv3 Licese.\n"
|
||||||
|
"\n"
|
||||||
|
"Written by Salvo 'LtWorf' Tomaselli <tiposchi@tiscali.it>\n"
|
||||||
|
"\n"
|
||||||
|
"https://ltworf.github.io/relational/"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational.py:56
|
||||||
|
msgid " -v Print version and exits"
|
||||||
|
msgstr " -v mostra le informazioni sulla versione ed esce"
|
||||||
|
|
||||||
|
#: relational.py:57
|
||||||
|
msgid " -h Print this help and exits"
|
||||||
|
msgstr " -h mostra questo aiuto ed esce"
|
||||||
|
|
||||||
|
#: relational.py:58
|
||||||
|
msgid " -q Uses Qt user interface"
|
||||||
|
msgstr " -q Usa l'interfaccia Qt"
|
||||||
|
|
||||||
|
#: relational.py:59
|
||||||
|
msgid " -r Uses readline user interface"
|
||||||
|
msgstr " -r Usa l'interfaccia readline"
|
||||||
|
|
||||||
|
#: relational.py:92
|
||||||
|
msgid ""
|
||||||
|
"Module relational_gui is missing.\n"
|
||||||
|
"Please install relational package or run make."
|
||||||
|
msgstr ""
|
||||||
|
"Il modulo relational_gui manca. Installare il pacchetto relational o "
|
||||||
|
"eseguire make."
|
||||||
|
|
||||||
|
#: relational.py:128
|
||||||
|
msgid ""
|
||||||
|
"Module relational_readline is missing.\n"
|
||||||
|
"Please install relational-cli package."
|
||||||
|
msgstr ""
|
||||||
|
"Il modulo relational_readline manca. Installare il pacchetto relational-cli."
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:126
|
||||||
|
#, python-format
|
||||||
|
msgid "%s is not a file"
|
||||||
|
msgstr "%s non è un file"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:137
|
||||||
|
#, python-format
|
||||||
|
msgid "%s is not a valid relation name"
|
||||||
|
msgstr "%s non è un nome valido per una relazione"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:143
|
||||||
|
#, python-format
|
||||||
|
msgid "Loaded relation %s"
|
||||||
|
msgstr "Relazione caricata %s"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:161 relational_gui/surveyForm.py:92
|
||||||
|
msgid "Yeah, not sending that."
|
||||||
|
msgstr "Non manderò questo."
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:169
|
||||||
|
msgid ""
|
||||||
|
"HELP [command]\n"
|
||||||
|
"\n"
|
||||||
|
"Comments are obtained starting with a ;\n"
|
||||||
|
"\n"
|
||||||
|
"To execute a query:\n"
|
||||||
|
"[relation =] query\n"
|
||||||
|
"\n"
|
||||||
|
"If the 1st part is omitted, the result will be stored in the relation "
|
||||||
|
"last_.\n"
|
||||||
|
"\n"
|
||||||
|
"To prevent from printing the relation, append a ; to the end of the query.\n"
|
||||||
|
"\n"
|
||||||
|
"To insert relational operators, type _OPNAME, they will be internally "
|
||||||
|
"replaced with the correct symbol.\n"
|
||||||
|
"\n"
|
||||||
|
"Rember: completion is enabled and can be very helpful if you can't remember "
|
||||||
|
"something."
|
||||||
|
msgstr ""
|
||||||
|
"HELP [comando] "
|
||||||
|
"I commenti si ottengono iniziando una riga con ; "
|
||||||
|
"Per eseguire una query: "
|
||||||
|
"[relazione =] query "
|
||||||
|
"Se la prima parte è omessa, il risultato verrà salvato nella "
|
||||||
|
"relazione last_. "
|
||||||
|
"Per non stampare la relazione, aggiungere un ; alla fine della query. "
|
||||||
|
"Per inserire gli operatori relazionali, scrivere _NOMEOP, questi saranno "
|
||||||
|
"internamente sostituiti dal simbolo corretto. "
|
||||||
|
"Ricordare: Il completamento è abilitato e può essere utile se non si "
|
||||||
|
"ricorda qualcosa."
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:188
|
||||||
|
msgid "Quits the program"
|
||||||
|
msgstr "Termina il programma"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:189
|
||||||
|
msgid "Lists the relations loaded"
|
||||||
|
msgstr "Elenca le relazioni caricate"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:190
|
||||||
|
msgid ""
|
||||||
|
"LOAD filename [relationame]\n"
|
||||||
|
"Loads a relation into memory"
|
||||||
|
msgstr ""
|
||||||
|
"LOAD nomefile {nomerelazione} "
|
||||||
|
"Carica una relazione in memoria"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:191
|
||||||
|
msgid ""
|
||||||
|
"UNLOAD relationame\n"
|
||||||
|
"Unloads a relation from memory"
|
||||||
|
msgstr ""
|
||||||
|
"UNLOAD nomerelazione "
|
||||||
|
"Rimuove una relazione dalla memoria"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:192
|
||||||
|
msgid ""
|
||||||
|
"SAVE filename relationame\n"
|
||||||
|
"Saves a relation in a file"
|
||||||
|
msgstr ""
|
||||||
|
"SAVE nomefile nomerelazione "
|
||||||
|
"Salva la relazione in un file"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:193
|
||||||
|
msgid "Prints the help on a command"
|
||||||
|
msgstr "Stampa la guida di un comando"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:194
|
||||||
|
msgid "Fill and send a survey"
|
||||||
|
msgstr "Compila e invia un sondaggio"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:196
|
||||||
|
#, python-format
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr "Comando sconosciuto: %s"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:222 relational_readline/linegui.py:234
|
||||||
|
#: relational_readline/linegui.py:245
|
||||||
|
msgid "Missing parameter"
|
||||||
|
msgstr "Parametro mancante"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:236
|
||||||
|
msgid "Too many parameter"
|
||||||
|
msgstr "Troppi parametri"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:241
|
||||||
|
#, python-format
|
||||||
|
msgid "No such relation %s"
|
||||||
|
msgstr "Nessuna relazione %s"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:322
|
||||||
|
msgid "; Type HELP to get the HELP"
|
||||||
|
msgstr "; Scrivere HELP per leggere la guida"
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:324
|
||||||
|
msgid "; Completion is activated using the tab (if supported by the terminal)"
|
||||||
|
msgstr ""
|
||||||
|
"; Il completamento è attivato con il tasto tab (se il terminale lo supporta)"
|
||||||
|
|
||||||
|
#: relational_gui/creator.py:91 relational_gui/creator.py:102
|
||||||
|
#: relational_gui/guihandler.py:283 relational_gui/guihandler.py:315
|
||||||
|
#: relational_gui/guihandler.py:325 relational_gui/guihandler.py:342
|
||||||
|
#: relational_gui/surveyForm.py:94
|
||||||
|
msgid "Error"
|
||||||
|
msgstr "Errore"
|
||||||
|
|
||||||
|
#: relational_gui/creator.py:92
|
||||||
|
msgid "Header error!"
|
||||||
|
msgstr "Errore nell'header!"
|
||||||
|
|
||||||
|
#: relational_gui/creator.py:102
|
||||||
|
#, python-format
|
||||||
|
msgid "Unset value in %d,%d!"
|
||||||
|
msgstr "Valore non impostato in %d,%d!"
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:119
|
||||||
|
msgid "Network error"
|
||||||
|
msgstr "Errore di rete"
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:121
|
||||||
|
#, python-format
|
||||||
|
msgid "New version available online: %s."
|
||||||
|
msgstr "Nuova versione disponibile online: %s."
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:123
|
||||||
|
msgid "Latest version installed."
|
||||||
|
msgstr "Ultima versione installata."
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:125
|
||||||
|
msgid "You are using an unstable version."
|
||||||
|
msgstr "Si sta usando una versione non stabile."
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:127
|
||||||
|
msgid "Version"
|
||||||
|
msgstr "Versione"
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:241
|
||||||
|
msgid "Empty relation"
|
||||||
|
msgstr "Relazione vuota"
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:283
|
||||||
|
msgid "Select a relation first."
|
||||||
|
msgstr "Selezionare una relazione"
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:287
|
||||||
|
msgid "Save Relation"
|
||||||
|
msgstr "Salva relazione"
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:289
|
||||||
|
msgid "Json relations (*.json);;CSV relations (*.csv)"
|
||||||
|
msgstr "Relazioni json (*.json);;Relazioni CSV (*.csv)"
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:333
|
||||||
|
msgid "New relation"
|
||||||
|
msgstr "Nuova relazione"
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:334
|
||||||
|
msgid "Insert the name for the new relation"
|
||||||
|
msgstr "Inserire il nome per la nuova relazione"
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:342
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Wrong name for destination relation: {name}."
|
||||||
|
msgstr "Nome errato per la relazione di destinazione: {name}."
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:410
|
||||||
|
msgid "Load Relation"
|
||||||
|
msgstr "Apri relazione"
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:412
|
||||||
|
msgid "Relations (*.json *.csv);;Text Files (*.txt);;All Files (*)"
|
||||||
|
msgstr "Relazioni (*.json *.csv);;File di testo (*.txt);;Tutti i file (*)"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:558
|
||||||
|
msgid "Relational"
|
||||||
|
msgstr "Relational"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:559
|
||||||
|
msgid "result=query"
|
||||||
|
msgstr "risultato=query"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:560 relational_gui/maingui.py:572
|
||||||
|
msgid "⌫"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:561 relational_gui/maingui.py:573
|
||||||
|
msgid "Ctrl+Shift+Backspace"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:562 relational_gui/maingui.py:574
|
||||||
|
msgid "Execute"
|
||||||
|
msgstr "Esegui"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:563 relational_gui/maingui.py:575
|
||||||
|
msgid "Ctrl+Return"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:564 relational_gui/maingui.py:566
|
||||||
|
msgid "Optimize"
|
||||||
|
msgstr "Ottimizza"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:565 relational_gui/maingui.py:568
|
||||||
|
msgid "Undo optimize"
|
||||||
|
msgstr "Annulla ottimizza"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:567
|
||||||
|
msgid "Ctrl+Shift+O"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:569
|
||||||
|
msgid "Ctrl+Shift+U"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:570
|
||||||
|
msgid "Clear history"
|
||||||
|
msgstr "Cancella cronologia"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:571
|
||||||
|
msgid "Ctrl+Shift+C"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:576
|
||||||
|
msgid "Processing…"
|
||||||
|
msgstr "Calcolo..."
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:577
|
||||||
|
msgid "&File"
|
||||||
|
msgstr "&File"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:578
|
||||||
|
msgid "Help"
|
||||||
|
msgstr "Aiuto"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:579
|
||||||
|
msgid "Relations"
|
||||||
|
msgstr "Relazioni"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:580
|
||||||
|
msgid "Setti&ngs"
|
||||||
|
msgstr "Impostazio&ni"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:581
|
||||||
|
msgid "Operators"
|
||||||
|
msgstr "Operatori"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:582
|
||||||
|
msgid "Left outer join"
|
||||||
|
msgstr "Join esterno sinistro"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:583
|
||||||
|
msgid "Alt+J, Alt+L"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:584
|
||||||
|
msgid "Alt+A"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:585
|
||||||
|
msgid "Union"
|
||||||
|
msgstr "Unione"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:586
|
||||||
|
msgid "Alt+U"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:587
|
||||||
|
msgid "Difference"
|
||||||
|
msgstr "Differenza"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:588
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Rinomina"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:589
|
||||||
|
msgid "Alt+R"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:590
|
||||||
|
msgid "Division"
|
||||||
|
msgstr "Divisione"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:591
|
||||||
|
msgid "Alt+D"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:592
|
||||||
|
msgid "Full outer join"
|
||||||
|
msgstr "Join esterno completo"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:593
|
||||||
|
msgid "Alt+J, Alt+O"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:594
|
||||||
|
msgid "Intersection"
|
||||||
|
msgstr "Intersezione"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:595
|
||||||
|
msgid "Alt+I"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:596
|
||||||
|
msgid "Product"
|
||||||
|
msgstr "Prodotto"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:597
|
||||||
|
msgid "Right outer join"
|
||||||
|
msgstr "Join esterno destro"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:598
|
||||||
|
msgid "Alt+J, Alt+R"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:599
|
||||||
|
msgid "Projection"
|
||||||
|
msgstr "Proiezione"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:600
|
||||||
|
msgid "Alt+P"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:601
|
||||||
|
msgid "Selection"
|
||||||
|
msgstr "Selezione"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:602
|
||||||
|
msgid "Alt+S"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:603
|
||||||
|
msgid "Natural join"
|
||||||
|
msgstr "Join naturale"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:604
|
||||||
|
msgid "Alt+J, Alt+J"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:605
|
||||||
|
msgid "Attrib&utes"
|
||||||
|
msgstr "Attrib&uti"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:606
|
||||||
|
msgid "Re&lations"
|
||||||
|
msgstr "Re&lazioni"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:608
|
||||||
|
msgid "New"
|
||||||
|
msgstr "Nuova"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:609 relational_gui/rel_edit.py:66
|
||||||
|
msgid "Edit"
|
||||||
|
msgstr "Modifica"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:610
|
||||||
|
msgid "Load"
|
||||||
|
msgstr "Apri"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:611
|
||||||
|
msgid "Save"
|
||||||
|
msgstr "Salva"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:612
|
||||||
|
msgid "Unload all"
|
||||||
|
msgstr "Chiudi tutte"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:613
|
||||||
|
msgid "Unload"
|
||||||
|
msgstr "Chiudi"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:614
|
||||||
|
msgid "Menu"
|
||||||
|
msgstr "Menu"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:615
|
||||||
|
msgid "About"
|
||||||
|
msgstr "Informazioni su Relational"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:616 relational_gui/survey.py:124
|
||||||
|
msgid "Survey"
|
||||||
|
msgstr "Sondaggio"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:617
|
||||||
|
msgid "&About"
|
||||||
|
msgstr "Informazioni su"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:618
|
||||||
|
msgid "&Load relation"
|
||||||
|
msgstr "Apri re&lazione"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:619
|
||||||
|
msgid "Ctrl+O"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:620
|
||||||
|
msgid "&Save relation"
|
||||||
|
msgstr "&Salva relazione"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:621
|
||||||
|
msgid "Ctrl+S"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:622
|
||||||
|
msgid "&Quit"
|
||||||
|
msgstr "&Esci"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:623
|
||||||
|
msgid "Ctrl+Q"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:624
|
||||||
|
msgid "&Check for new versions"
|
||||||
|
msgstr "&Controlla nuove versioni"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:625
|
||||||
|
msgid "&New relation"
|
||||||
|
msgstr "&Nuova relazione"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:626
|
||||||
|
msgid "Ctrl+N"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:627
|
||||||
|
msgid "&Edit relation"
|
||||||
|
msgstr "Modifica r&elazione"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:628
|
||||||
|
msgid "Ctrl+E"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:629
|
||||||
|
msgid "&Unload relation"
|
||||||
|
msgstr "Chi&udi relazione"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:630
|
||||||
|
msgid "&Multi-line mode"
|
||||||
|
msgstr "&Modalità multi riga"
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:631
|
||||||
|
msgid "Ctrl+L"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:632
|
||||||
|
msgid "Show history"
|
||||||
|
msgstr "Mostra cronologia"
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:65
|
||||||
|
msgid "Relation editor"
|
||||||
|
msgstr "Editor di relazioni"
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:67
|
||||||
|
msgid "Add tuple"
|
||||||
|
msgstr "Aggiungi tupla"
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:68
|
||||||
|
msgid "Remove tuple"
|
||||||
|
msgstr "Rimuovi tupla"
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:69
|
||||||
|
msgid "Add column"
|
||||||
|
msgstr "Aggiungi colonna"
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:70
|
||||||
|
msgid "Remove column"
|
||||||
|
msgstr "Rimuovi colonna"
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:71
|
||||||
|
msgid ""
|
||||||
|
"Remember that new relations and modified relations are not automatically "
|
||||||
|
"saved"
|
||||||
|
msgstr ""
|
||||||
|
"Ricorda che le relazioni nuove e modificate non sono salvate automaticamente"
|
||||||
|
|
||||||
|
#: relational_gui/surveyForm.py:90
|
||||||
|
msgid "Thanks"
|
||||||
|
msgstr "Grazie"
|
||||||
|
|
||||||
|
#: relational_gui/surveyForm.py:90
|
||||||
|
msgid "Thanks for sending!"
|
||||||
|
msgstr "Grazie per l'invio!"
|
||||||
|
|
||||||
|
#: relational_gui/surveyForm.py:92
|
||||||
|
msgid "Seriously?"
|
||||||
|
msgstr "Sul serio?"
|
||||||
|
|
||||||
|
#: relational_gui/surveyForm.py:94
|
||||||
|
msgid "Unable to send the data!"
|
||||||
|
msgstr "Impossibile inviare i dati"
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:125
|
||||||
|
msgid "Country"
|
||||||
|
msgstr "Nazione"
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:126
|
||||||
|
msgid "School"
|
||||||
|
msgstr "Scuola"
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:127
|
||||||
|
msgid "Age"
|
||||||
|
msgstr "Età"
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:128
|
||||||
|
msgid "How did you find relational"
|
||||||
|
msgstr "Come hai trovato Relational"
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:129
|
||||||
|
msgid "System"
|
||||||
|
msgstr "Sistema"
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:130
|
||||||
|
msgid "Comments"
|
||||||
|
msgstr "Commenti"
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:131
|
||||||
|
msgid "Email (only if you want a reply)"
|
||||||
|
msgstr "Email (solo se si desidera una risposta)"
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:132
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Annulla"
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:133
|
||||||
|
msgid "Clear"
|
||||||
|
msgstr "Cancella"
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:134
|
||||||
|
msgid "Send"
|
||||||
|
msgstr "Invia"
|
||||||
|
|
||||||
|
#: relational/maintenance.py:157 relational/maintenance.py:188
|
||||||
|
msgid "Invalid name for destination relation"
|
||||||
|
msgstr "Nome non valido per la relazione di destinazione"
|
||||||
|
|
||||||
|
#: relational/maintenance.py:230
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Error in query: %s\n"
|
||||||
|
"%s"
|
||||||
|
msgstr ""
|
||||||
|
"Errore nella query: %s "
|
||||||
|
"%s"
|
||||||
|
|
||||||
|
#: relational/maintenance.py:235
|
||||||
|
msgid "No query executed"
|
||||||
|
msgstr "Nessuna query eseguita"
|
||||||
|
|
||||||
|
#: relational/parser.py:310
|
||||||
|
msgid "Failed to parse empty expression"
|
||||||
|
msgstr "Espressione vuota"
|
||||||
|
|
||||||
|
#: relational/parser.py:335
|
||||||
|
#, python-format
|
||||||
|
msgid "Expected left operand for %s"
|
||||||
|
msgstr "Expected left operand for %s"
|
||||||
|
|
||||||
|
#: relational/parser.py:339
|
||||||
|
#, python-format
|
||||||
|
msgid "Expected right operand for %s"
|
||||||
|
msgstr "Atteso operatore destro per %s"
|
||||||
|
|
||||||
|
#: relational/parser.py:346
|
||||||
|
#, python-format
|
||||||
|
msgid "Expected more tokens in %s"
|
||||||
|
msgstr "Attesi più token in %s"
|
||||||
|
|
||||||
|
#: relational/parser.py:349
|
||||||
|
#, python-format
|
||||||
|
msgid "Too many tokens in %s"
|
||||||
|
msgstr "Troppi token in %s"
|
||||||
|
|
||||||
|
#: relational/parser.py:356
|
||||||
|
#, python-format
|
||||||
|
msgid "Parse error on %s"
|
||||||
|
msgstr "Errore di parsing in %s"
|
||||||
|
|
||||||
|
#: relational/parser.py:426
|
||||||
|
#, python-format
|
||||||
|
msgid "Missing matching ')' in '%s'"
|
||||||
|
msgstr "')' corrispondente mancante in '%s'"
|
||||||
|
|
||||||
|
#: relational/relation.py:92 relational/relation.py:140
|
||||||
|
#, python-format
|
||||||
|
msgid "Line %d contains an incorrect amount of values"
|
||||||
|
msgstr "La riga %d contiene un numero incorretto di valori"
|
||||||
|
|
||||||
|
#: relational/relation.py:173
|
||||||
|
#, python-format
|
||||||
|
msgid "Relations differ: [%s] [%s]"
|
||||||
|
msgstr "Le relazioni differiscono: [%s] [%s]"
|
||||||
|
|
||||||
|
#: relational/relation.py:184
|
||||||
|
#, python-format
|
||||||
|
msgid "Failed to compile expression: %s"
|
||||||
|
msgstr "Compilazione dell'espressione fallita: %s"
|
||||||
|
|
||||||
|
#: relational/relation.py:197
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Failed to evaluate {expr} with {i}\n"
|
||||||
|
"{e}"
|
||||||
|
msgstr ""
|
||||||
|
"Impossibile valutare {expr} con {i} "
|
||||||
|
"{e}"
|
||||||
|
|
||||||
|
#: relational/relation.py:209
|
||||||
|
msgid "Unable to perform product on relations with colliding attributes"
|
||||||
|
msgstr ""
|
||||||
|
"Impossibile eseguire il prodotto su relazioni con attributi che collidono"
|
||||||
|
|
||||||
|
#: relational/relation.py:235
|
||||||
|
msgid "Invalid attributes for projection"
|
||||||
|
msgstr "Attributi invalidi per la proiezione"
|
||||||
|
|
||||||
|
#: relational/relation.py:476
|
||||||
|
#, python-format
|
||||||
|
msgid "\"%s\" is not a valid attribute name"
|
||||||
|
msgstr "\"%s\" non è un nome di attributo valido"
|
||||||
|
|
||||||
|
#: relational/relation.py:492
|
||||||
|
#, python-format
|
||||||
|
msgid "%s is not a valid attribute name"
|
||||||
|
msgstr "%s non è un nome di attributo valido"
|
||||||
|
|
||||||
|
#: relational/relation.py:497
|
||||||
|
#, python-format
|
||||||
|
msgid "Field not found: %s"
|
||||||
|
msgstr "File non trovato: %s"
|
||||||
|
|
||||||
|
#: relational/rtypes.py:87
|
||||||
|
#, python-format
|
||||||
|
msgid "%s is not a valid date"
|
||||||
|
msgstr "%s non è una data valida"
|
688
po/messages.pot
Normal file
688
po/messages.pot
Normal file
@ -0,0 +1,688 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the relational package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: relational\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2020-10-24 18:25+0200\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=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: relational.py:37
|
||||||
|
msgid ""
|
||||||
|
"Copyright (C) 2008-2020 Salvo 'LtWorf' Tomaselli.\n"
|
||||||
|
"\n"
|
||||||
|
"This program comes with ABSOLUTELY NO WARRANTY.\n"
|
||||||
|
"This is free software, and you are welcome to redistribute it\n"
|
||||||
|
"under certain conditions.\n"
|
||||||
|
"For details see the GPLv3 Licese.\n"
|
||||||
|
"\n"
|
||||||
|
"Written by Salvo 'LtWorf' Tomaselli <tiposchi@tiscali.it>\n"
|
||||||
|
"\n"
|
||||||
|
"https://ltworf.github.io/relational/"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational.py:56
|
||||||
|
msgid " -v Print version and exits"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational.py:57
|
||||||
|
msgid " -h Print this help and exits"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational.py:58
|
||||||
|
msgid " -q Uses Qt user interface"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational.py:59
|
||||||
|
msgid " -r Uses readline user interface"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational.py:92
|
||||||
|
msgid ""
|
||||||
|
"Module relational_gui is missing.\n"
|
||||||
|
"Please install relational package or run make."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational.py:128
|
||||||
|
msgid ""
|
||||||
|
"Module relational_readline is missing.\n"
|
||||||
|
"Please install relational-cli package."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:126
|
||||||
|
#, python-format
|
||||||
|
msgid "%s is not a file"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:137
|
||||||
|
#, python-format
|
||||||
|
msgid "%s is not a valid relation name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:143
|
||||||
|
#, python-format
|
||||||
|
msgid "Loaded relation %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:161 relational_gui/surveyForm.py:92
|
||||||
|
msgid "Yeah, not sending that."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:169
|
||||||
|
msgid ""
|
||||||
|
"HELP [command]\n"
|
||||||
|
"\n"
|
||||||
|
"Comments are obtained starting with a ;\n"
|
||||||
|
"\n"
|
||||||
|
"To execute a query:\n"
|
||||||
|
"[relation =] query\n"
|
||||||
|
"\n"
|
||||||
|
"If the 1st part is omitted, the result will be stored in the relation "
|
||||||
|
"last_.\n"
|
||||||
|
"\n"
|
||||||
|
"To prevent from printing the relation, append a ; to the end of the query.\n"
|
||||||
|
"\n"
|
||||||
|
"To insert relational operators, type _OPNAME, they will be internally "
|
||||||
|
"replaced with the correct symbol.\n"
|
||||||
|
"\n"
|
||||||
|
"Rember: completion is enabled and can be very helpful if you can't remember "
|
||||||
|
"something."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:188
|
||||||
|
msgid "Quits the program"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:189
|
||||||
|
msgid "Lists the relations loaded"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:190
|
||||||
|
msgid ""
|
||||||
|
"LOAD filename [relationame]\n"
|
||||||
|
"Loads a relation into memory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:191
|
||||||
|
msgid ""
|
||||||
|
"UNLOAD relationame\n"
|
||||||
|
"Unloads a relation from memory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:192
|
||||||
|
msgid ""
|
||||||
|
"SAVE filename relationame\n"
|
||||||
|
"Saves a relation in a file"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:193
|
||||||
|
msgid "Prints the help on a command"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:194
|
||||||
|
msgid "Fill and send a survey"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:196
|
||||||
|
#, python-format
|
||||||
|
msgid "Unknown command: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:222 relational_readline/linegui.py:234
|
||||||
|
#: relational_readline/linegui.py:245
|
||||||
|
msgid "Missing parameter"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:236
|
||||||
|
msgid "Too many parameter"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:241
|
||||||
|
#, python-format
|
||||||
|
msgid "No such relation %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:322
|
||||||
|
msgid "; Type HELP to get the HELP"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_readline/linegui.py:324
|
||||||
|
msgid "; Completion is activated using the tab (if supported by the terminal)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/creator.py:91 relational_gui/creator.py:102
|
||||||
|
#: relational_gui/guihandler.py:283 relational_gui/guihandler.py:315
|
||||||
|
#: relational_gui/guihandler.py:325 relational_gui/guihandler.py:342
|
||||||
|
#: relational_gui/surveyForm.py:94
|
||||||
|
msgid "Error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/creator.py:92
|
||||||
|
msgid "Header error!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/creator.py:102
|
||||||
|
#, python-format
|
||||||
|
msgid "Unset value in %d,%d!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:119
|
||||||
|
msgid "Network error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:121
|
||||||
|
#, python-format
|
||||||
|
msgid "New version available online: %s."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:123
|
||||||
|
msgid "Latest version installed."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:125
|
||||||
|
msgid "You are using an unstable version."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:127
|
||||||
|
msgid "Version"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:241
|
||||||
|
msgid "Empty relation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:283
|
||||||
|
msgid "Select a relation first."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:287
|
||||||
|
msgid "Save Relation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:289
|
||||||
|
msgid "Json relations (*.json);;CSV relations (*.csv)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:333
|
||||||
|
msgid "New relation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:334
|
||||||
|
msgid "Insert the name for the new relation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:342
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Wrong name for destination relation: {name}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:410
|
||||||
|
msgid "Load Relation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/guihandler.py:412
|
||||||
|
msgid "Relations (*.json *.csv);;Text Files (*.txt);;All Files (*)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:558
|
||||||
|
msgid "Relational"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:559
|
||||||
|
msgid "result=query"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:560 relational_gui/maingui.py:572
|
||||||
|
msgid "⌫"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:561 relational_gui/maingui.py:573
|
||||||
|
msgid "Ctrl+Shift+Backspace"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:562 relational_gui/maingui.py:574
|
||||||
|
msgid "Execute"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:563 relational_gui/maingui.py:575
|
||||||
|
msgid "Ctrl+Return"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:564 relational_gui/maingui.py:566
|
||||||
|
msgid "Optimize"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:565 relational_gui/maingui.py:568
|
||||||
|
msgid "Undo optimize"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:567
|
||||||
|
msgid "Ctrl+Shift+O"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:569
|
||||||
|
msgid "Ctrl+Shift+U"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:570
|
||||||
|
msgid "Clear history"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:571
|
||||||
|
msgid "Ctrl+Shift+C"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:576
|
||||||
|
msgid "Processing…"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:577
|
||||||
|
msgid "&File"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:578
|
||||||
|
msgid "Help"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:579
|
||||||
|
msgid "Relations"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:580
|
||||||
|
msgid "Setti&ngs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:581
|
||||||
|
msgid "Operators"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:582
|
||||||
|
msgid "Left outer join"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:583
|
||||||
|
msgid "Alt+J, Alt+L"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:584
|
||||||
|
msgid "Alt+A"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:585
|
||||||
|
msgid "Union"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:586
|
||||||
|
msgid "Alt+U"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:587
|
||||||
|
msgid "Difference"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:588
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:589
|
||||||
|
msgid "Alt+R"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:590
|
||||||
|
msgid "Division"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:591
|
||||||
|
msgid "Alt+D"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:592
|
||||||
|
msgid "Full outer join"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:593
|
||||||
|
msgid "Alt+J, Alt+O"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:594
|
||||||
|
msgid "Intersection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:595
|
||||||
|
msgid "Alt+I"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:596
|
||||||
|
msgid "Product"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:597
|
||||||
|
msgid "Right outer join"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:598
|
||||||
|
msgid "Alt+J, Alt+R"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:599
|
||||||
|
msgid "Projection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:600
|
||||||
|
msgid "Alt+P"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:601
|
||||||
|
msgid "Selection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:602
|
||||||
|
msgid "Alt+S"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:603
|
||||||
|
msgid "Natural join"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:604
|
||||||
|
msgid "Alt+J, Alt+J"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:605
|
||||||
|
msgid "Attrib&utes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:606
|
||||||
|
msgid "Re&lations"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:608
|
||||||
|
msgid "New"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:609 relational_gui/rel_edit.py:66
|
||||||
|
msgid "Edit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:610
|
||||||
|
msgid "Load"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:611
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:612
|
||||||
|
msgid "Unload all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:613
|
||||||
|
msgid "Unload"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:614
|
||||||
|
msgid "Menu"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:615
|
||||||
|
msgid "About"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:616 relational_gui/survey.py:124
|
||||||
|
msgid "Survey"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:617
|
||||||
|
msgid "&About"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:618
|
||||||
|
msgid "&Load relation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:619
|
||||||
|
msgid "Ctrl+O"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:620
|
||||||
|
msgid "&Save relation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:621
|
||||||
|
msgid "Ctrl+S"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:622
|
||||||
|
msgid "&Quit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:623
|
||||||
|
msgid "Ctrl+Q"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:624
|
||||||
|
msgid "&Check for new versions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:625
|
||||||
|
msgid "&New relation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:626
|
||||||
|
msgid "Ctrl+N"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:627
|
||||||
|
msgid "&Edit relation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:628
|
||||||
|
msgid "Ctrl+E"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:629
|
||||||
|
msgid "&Unload relation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:630
|
||||||
|
msgid "&Multi-line mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:631
|
||||||
|
msgid "Ctrl+L"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/maingui.py:632
|
||||||
|
msgid "Show history"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:65
|
||||||
|
msgid "Relation editor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:67
|
||||||
|
msgid "Add tuple"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:68
|
||||||
|
msgid "Remove tuple"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:69
|
||||||
|
msgid "Add column"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:70
|
||||||
|
msgid "Remove column"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/rel_edit.py:71
|
||||||
|
msgid ""
|
||||||
|
"Remember that new relations and modified relations are not automatically "
|
||||||
|
"saved"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/surveyForm.py:90
|
||||||
|
msgid "Thanks"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/surveyForm.py:90
|
||||||
|
msgid "Thanks for sending!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/surveyForm.py:92
|
||||||
|
msgid "Seriously?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/surveyForm.py:94
|
||||||
|
msgid "Unable to send the data!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:125
|
||||||
|
msgid "Country"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:126
|
||||||
|
msgid "School"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:127
|
||||||
|
msgid "Age"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:128
|
||||||
|
msgid "How did you find relational"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:129
|
||||||
|
msgid "System"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:130
|
||||||
|
msgid "Comments"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:131
|
||||||
|
msgid "Email (only if you want a reply)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:132
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:133
|
||||||
|
msgid "Clear"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational_gui/survey.py:134
|
||||||
|
msgid "Send"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/maintenance.py:157 relational/maintenance.py:188
|
||||||
|
msgid "Invalid name for destination relation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/maintenance.py:230
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Error in query: %s\n"
|
||||||
|
"%s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/maintenance.py:235
|
||||||
|
msgid "No query executed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/parser.py:310
|
||||||
|
msgid "Failed to parse empty expression"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/parser.py:335
|
||||||
|
#, python-format
|
||||||
|
msgid "Expected left operand for %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/parser.py:339
|
||||||
|
#, python-format
|
||||||
|
msgid "Expected right operand for %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/parser.py:346
|
||||||
|
#, python-format
|
||||||
|
msgid "Expected more tokens in %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/parser.py:349
|
||||||
|
#, python-format
|
||||||
|
msgid "Too many tokens in %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/parser.py:356
|
||||||
|
#, python-format
|
||||||
|
msgid "Parse error on %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/parser.py:426
|
||||||
|
#, python-format
|
||||||
|
msgid "Missing matching ')' in '%s'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/relation.py:92 relational/relation.py:140
|
||||||
|
#, python-format
|
||||||
|
msgid "Line %d contains an incorrect amount of values"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/relation.py:173
|
||||||
|
#, python-format
|
||||||
|
msgid "Relations differ: [%s] [%s]"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/relation.py:184
|
||||||
|
#, python-format
|
||||||
|
msgid "Failed to compile expression: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/relation.py:197
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Failed to evaluate {expr} with {i}\n"
|
||||||
|
"{e}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/relation.py:209
|
||||||
|
msgid "Unable to perform product on relations with colliding attributes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/relation.py:235
|
||||||
|
msgid "Invalid attributes for projection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/relation.py:476
|
||||||
|
#, python-format
|
||||||
|
msgid "\"%s\" is not a valid attribute name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/relation.py:492
|
||||||
|
#, python-format
|
||||||
|
msgid "%s is not a valid attribute name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/relation.py:497
|
||||||
|
#, python-format
|
||||||
|
msgid "Field not found: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relational/rtypes.py:87
|
||||||
|
#, python-format
|
||||||
|
msgid "%s is not a valid date"
|
||||||
|
msgstr ""
|
@ -21,22 +21,29 @@ import sys
|
|||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import getopt
|
import getopt
|
||||||
|
import gettext
|
||||||
|
|
||||||
|
|
||||||
|
gettext.bindtextdomain('relational')
|
||||||
|
gettext.textdomain('relational')
|
||||||
|
_ = gettext.gettext
|
||||||
|
|
||||||
|
|
||||||
version = "3.1"
|
version = "3.1"
|
||||||
|
|
||||||
|
|
||||||
def printver(exit=True):
|
def printver(exit=True):
|
||||||
print ("Relational %s" % version)
|
print ("Relational %s" % version)
|
||||||
print ("Copyright (C) 2008-2020 Salvo 'LtWorf' Tomaselli.")
|
print (_("Copyright (C) 2008-2020 Salvo 'LtWorf' Tomaselli.\n"
|
||||||
print ()
|
"\n"
|
||||||
print ("This program comes with ABSOLUTELY NO WARRANTY.")
|
"This program comes with ABSOLUTELY NO WARRANTY.\n"
|
||||||
print ("This is free software, and you are welcome to redistribute it")
|
"This is free software, and you are welcome to redistribute it\n"
|
||||||
print ("under certain conditions.")
|
"under certain conditions.\n"
|
||||||
print ("For details see the GPLv3 Licese.")
|
"For details see the GPLv3 Licese.\n"
|
||||||
print ()
|
"\n"
|
||||||
print ("Written by Salvo 'LtWorf' Tomaselli <tiposchi@tiscali.it>")
|
"Written by Salvo 'LtWorf' Tomaselli <tiposchi@tiscali.it>\n"
|
||||||
print ()
|
"\n"
|
||||||
print ("https://ltworf.github.io/relational/")
|
"https://ltworf.github.io/relational/"))
|
||||||
if exit:
|
if exit:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
@ -46,15 +53,10 @@ def printhelp(code=0):
|
|||||||
print ()
|
print ()
|
||||||
print ("Usage: %s [options] [files]" % sys.argv[0])
|
print ("Usage: %s [options] [files]" % sys.argv[0])
|
||||||
print ()
|
print ()
|
||||||
print (" -v Print version and exits")
|
print (_(' -v Print version and exits'))
|
||||||
print (" -h Print this help and exits")
|
print (_(' -h Print this help and exits'))
|
||||||
|
print (_(' -q Uses Qt user interface'))
|
||||||
if sys.argv[0].endswith('relational-cli'):
|
print (_(' -r Uses readline user interface'))
|
||||||
print (" -q Uses QT user interface")
|
|
||||||
print (" -r Uses readline user interface (default)")
|
|
||||||
else:
|
|
||||||
print (" -q Uses QT user interface (default)")
|
|
||||||
print (" -r Uses readline user interface")
|
|
||||||
sys.exit(code)
|
sys.exit(code)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
@ -87,8 +89,7 @@ if __name__ == "__main__":
|
|||||||
from relational_gui import guihandler, about, surveyForm
|
from relational_gui import guihandler, about, surveyForm
|
||||||
except:
|
except:
|
||||||
print (
|
print (
|
||||||
"Module relational_gui is missing.\n"
|
_('Module relational_gui is missing.\nPlease install relational package or run make.'),
|
||||||
"Please install relational package or run make.",
|
|
||||||
file=sys.stderr
|
file=sys.stderr
|
||||||
)
|
)
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
@ -124,7 +125,7 @@ if __name__ == "__main__":
|
|||||||
printver(False)
|
printver(False)
|
||||||
except:
|
except:
|
||||||
print (
|
print (
|
||||||
"Module relational_readline is missing.\nPlease install relational-cli package.",
|
_('Module relational_readline is missing.\nPlease install relational-cli package.'),
|
||||||
file=sys.stderr
|
file=sys.stderr
|
||||||
)
|
)
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
|
@ -22,6 +22,7 @@ import os.path
|
|||||||
import pickle
|
import pickle
|
||||||
import base64
|
import base64
|
||||||
from typing import Optional, Tuple
|
from typing import Optional, Tuple
|
||||||
|
from gettext import gettext as _
|
||||||
|
|
||||||
from relational.relation import Relation
|
from relational.relation import Relation
|
||||||
from relational import parser
|
from relational import parser
|
||||||
@ -153,7 +154,7 @@ class UserInterface:
|
|||||||
def set_relation(self, name: str, rel: Relation) -> None:
|
def set_relation(self, name: str, rel: Relation) -> None:
|
||||||
'''Sets the relation corresponding to name.'''
|
'''Sets the relation corresponding to name.'''
|
||||||
if not is_valid_relation_name(name):
|
if not is_valid_relation_name(name):
|
||||||
raise Exception('Invalid name for destination relation')
|
raise Exception(_('Invalid name for destination relation'))
|
||||||
self.relations[name] = rel
|
self.relations[name] = rel
|
||||||
|
|
||||||
def suggest_name(self, filename: str) -> Optional[str]:
|
def suggest_name(self, filename: str) -> Optional[str]:
|
||||||
@ -184,7 +185,7 @@ class UserInterface:
|
|||||||
relname is not None, adds the result to the
|
relname is not None, adds the result to the
|
||||||
dictionary, with the name given in relname.'''
|
dictionary, with the name given in relname.'''
|
||||||
if not is_valid_relation_name(relname):
|
if not is_valid_relation_name(relname):
|
||||||
raise Exception('Invalid name for destination relation')
|
raise Exception(_('Invalid name for destination relation'))
|
||||||
|
|
||||||
expr = parser.parse(query)
|
expr = parser.parse(query)
|
||||||
result = expr(self.relations)
|
result = expr(self.relations)
|
||||||
@ -226,10 +227,10 @@ class UserInterface:
|
|||||||
try:
|
try:
|
||||||
r = self.execute(query, relname)
|
r = self.execute(query, relname)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception('Error in query: %s\n%s' % (
|
raise Exception(_('Error in query: %s\n%s') % (
|
||||||
query,
|
query,
|
||||||
str(e)
|
str(e)
|
||||||
))
|
))
|
||||||
if r is None:
|
if r is None:
|
||||||
raise Exception('No query executed')
|
raise Exception(_('No query executed'))
|
||||||
return r
|
return r
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
# http://ltworf.github.io/relational/grammar.html
|
# http://ltworf.github.io/relational/grammar.html
|
||||||
from typing import Optional, Union, List, Any, Dict, Literal
|
from typing import Optional, Union, List, Any, Dict, Literal
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from gettext import gettext as _
|
||||||
|
|
||||||
from relational import rtypes
|
from relational import rtypes
|
||||||
|
|
||||||
@ -55,6 +56,7 @@ __all__ = [
|
|||||||
'parse',
|
'parse',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
PRODUCT = '*'
|
PRODUCT = '*'
|
||||||
DIFFERENCE = '-'
|
DIFFERENCE = '-'
|
||||||
UNION = '∪'
|
UNION = '∪'
|
||||||
@ -305,7 +307,7 @@ def parse_tokens(expression: List[Union[list, str]]) -> Node:
|
|||||||
expression = expression[0]
|
expression = expression[0]
|
||||||
|
|
||||||
if len(expression) == 0:
|
if len(expression) == 0:
|
||||||
raise ParserException('Failed to parse empty expression')
|
raise ParserException(_('Failed to parse empty expression'))
|
||||||
|
|
||||||
# The list contains only 1 string. Means it is the name of a relation
|
# The list contains only 1 string. Means it is the name of a relation
|
||||||
if len(expression) == 1:
|
if len(expression) == 1:
|
||||||
@ -330,28 +332,28 @@ def parse_tokens(expression: List[Union[list, str]]) -> Node:
|
|||||||
|
|
||||||
if len(expression[:i]) == 0:
|
if len(expression[:i]) == 0:
|
||||||
raise ParserException(
|
raise ParserException(
|
||||||
f'Expected left operand for {expression[i]!r}')
|
_('Expected left operand for %s') % repr(expression[i]))
|
||||||
|
|
||||||
if len(expression[i + 1:]) == 0:
|
if len(expression[i + 1:]) == 0:
|
||||||
raise ParserException(
|
raise ParserException(
|
||||||
f'Expected right operand for {expression[i]!r}')
|
_('Expected right operand for %s') % repr(expression[i]))
|
||||||
return Binary(expression[i], parse_tokens(expression[:i]), parse_tokens(expression[i + 1:])) # type: ignore
|
return Binary(expression[i], parse_tokens(expression[:i]), parse_tokens(expression[i + 1:])) # type: ignore
|
||||||
'''Searches for unary operators, parsing from right to left'''
|
'''Searches for unary operators, parsing from right to left'''
|
||||||
for i in range(len(expression)):
|
for i in range(len(expression)):
|
||||||
if expression[i] in u_operators: # Unary operator
|
if expression[i] in u_operators: # Unary operator
|
||||||
if len(expression) <= i + 2:
|
if len(expression) <= i + 2:
|
||||||
raise ParserException(
|
raise ParserException(
|
||||||
f'Expected more tokens in {expression[i]!r}')
|
_('Expected more tokens in %s') % repr(expression[i]))
|
||||||
elif len(expression) > i + 3:
|
elif len(expression) > i + 3:
|
||||||
raise ParserException(
|
raise ParserException(
|
||||||
f'Too many tokens in {expression[i]!r}')
|
_('Too many tokens in %s') % repr(expression[i]))
|
||||||
|
|
||||||
return Unary(
|
return Unary(
|
||||||
expression[i], # type: ignore
|
expression[i], # type: ignore
|
||||||
prop=expression[1 + i].strip(), # type: ignore
|
prop=expression[1 + i].strip(), # type: ignore
|
||||||
child=parse_tokens(expression[2 + i]) # type: ignore
|
child=parse_tokens(expression[2 + i]) # type: ignore
|
||||||
)
|
)
|
||||||
raise ParserException(f'Parse error on {expression!r}')
|
raise ParserException(_('Parse error on %s') % repr(expression))
|
||||||
|
|
||||||
|
|
||||||
def _find_matching_parenthesis(expression: str, start=0, openpar='(', closepar=')') -> Optional[int]:
|
def _find_matching_parenthesis(expression: str, start=0, openpar='(', closepar=')') -> Optional[int]:
|
||||||
@ -421,7 +423,7 @@ def tokenize(expression: str) -> list:
|
|||||||
end = _find_matching_parenthesis(expression)
|
end = _find_matching_parenthesis(expression)
|
||||||
if end is None:
|
if end is None:
|
||||||
raise TokenizerException(
|
raise TokenizerException(
|
||||||
"Missing matching ')' in '%s'" % expression)
|
_('Missing matching \')\' in \'%s\'') % expression)
|
||||||
# Appends the tokenization of the content of the parenthesis
|
# Appends the tokenization of the content of the parenthesis
|
||||||
items.append(tokenize(expression[1:end]))
|
items.append(tokenize(expression[1:end]))
|
||||||
# Removes the entire parentesis and content from the expression
|
# Removes the entire parentesis and content from the expression
|
||||||
|
@ -24,6 +24,7 @@ from collections import deque
|
|||||||
from typing import FrozenSet, Iterable, List, Dict, Tuple, Optional
|
from typing import FrozenSet, Iterable, List, Dict, Tuple, Optional
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from gettext import gettext as _
|
||||||
|
|
||||||
from relational.rtypes import *
|
from relational.rtypes import *
|
||||||
|
|
||||||
@ -88,7 +89,7 @@ class Relation:
|
|||||||
content = []
|
content = []
|
||||||
for row in loaded['content']:
|
for row in loaded['content']:
|
||||||
if len(row) != len(header):
|
if len(row) != len(header):
|
||||||
raise ValueError(f'Line {row} contains an incorrect amount of values')
|
raise ValueError(_('Line %d contains an incorrect amount of values') % row)
|
||||||
t_row: Tuple[Optional[Union[int, float, str, Rdate]], ...] = load(
|
t_row: Tuple[Optional[Union[int, float, str, Rdate]], ...] = load(
|
||||||
row,
|
row,
|
||||||
Tuple[Optional[Union[int, float, str, Rdate]], ...], # type: ignore
|
Tuple[Optional[Union[int, float, str, Rdate]], ...], # type: ignore
|
||||||
@ -136,7 +137,7 @@ class Relation:
|
|||||||
|
|
||||||
for row in content:
|
for row in content:
|
||||||
if len(row) != len(header):
|
if len(row) != len(header):
|
||||||
raise ValueError(f'Line {row} contains an incorrect amount of values')
|
raise ValueError(_('Line %d contains an incorrect amount of values') % row)
|
||||||
r_content.append(row)
|
r_content.append(row)
|
||||||
|
|
||||||
# Guess types
|
# Guess types
|
||||||
@ -169,7 +170,7 @@ class Relation:
|
|||||||
return other
|
return other
|
||||||
elif len(self.header) == len(other.header) and self.header.sharedAttributes(other.header) == len(self.header):
|
elif len(self.header) == len(other.header) and self.header.sharedAttributes(other.header) == len(self.header):
|
||||||
return other.projection(self.header)
|
return other.projection(self.header)
|
||||||
raise TypeError('Relations differ: [%s] [%s]' % (
|
raise TypeError(_('Relations differ: [%s] [%s]') % (
|
||||||
','.join(self.header), ','.join(other.header)
|
','.join(self.header), ','.join(other.header)
|
||||||
))
|
))
|
||||||
|
|
||||||
@ -180,7 +181,7 @@ class Relation:
|
|||||||
try:
|
try:
|
||||||
c_expr = compile(expr, 'selection', 'eval')
|
c_expr = compile(expr, 'selection', 'eval')
|
||||||
except:
|
except:
|
||||||
raise Exception(f'Failed to compile expression: {expr}')
|
raise Exception(_('Failed to compile expression: %s') % expr)
|
||||||
|
|
||||||
content = []
|
content = []
|
||||||
for i in self.content:
|
for i in self.content:
|
||||||
@ -193,7 +194,7 @@ class Relation:
|
|||||||
if eval(c_expr, attributes):
|
if eval(c_expr, attributes):
|
||||||
content.append(i)
|
content.append(i)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception(f'Failed to evaluate {expr} with {i}\n{e}')
|
raise Exception(_('Failed to evaluate {expr} with {i}\n{e}').format(expr=expr, i=i, e=e))
|
||||||
return Relation(self.header, frozenset(content))
|
return Relation(self.header, frozenset(content))
|
||||||
|
|
||||||
def product(self, other: 'Relation') -> 'Relation':
|
def product(self, other: 'Relation') -> 'Relation':
|
||||||
@ -205,7 +206,7 @@ class Relation:
|
|||||||
raise Exception('Operand must be a relation')
|
raise Exception('Operand must be a relation')
|
||||||
if self.header.sharedAttributes(other.header) != 0:
|
if self.header.sharedAttributes(other.header) != 0:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
'Unable to perform product on relations with colliding attributes'
|
_('Unable to perform product on relations with colliding attributes')
|
||||||
)
|
)
|
||||||
header = Header(self.header + other.header)
|
header = Header(self.header + other.header)
|
||||||
|
|
||||||
@ -231,7 +232,7 @@ class Relation:
|
|||||||
ids = self.header.getAttributesId(attributes)
|
ids = self.header.getAttributesId(attributes)
|
||||||
|
|
||||||
if len(ids) == 0:
|
if len(ids) == 0:
|
||||||
raise Exception('Invalid attributes for projection')
|
raise Exception(_('Invalid attributes for projection'))
|
||||||
header = Header((self.header[i] for i in ids))
|
header = Header((self.header[i] for i in ids))
|
||||||
|
|
||||||
content = frozenset(tuple((i[j] for j in ids)) for i in self.content)
|
content = frozenset(tuple((i[j] for j in ids)) for i in self.content)
|
||||||
@ -472,7 +473,7 @@ class Header(tuple):
|
|||||||
|
|
||||||
for i in self:
|
for i in self:
|
||||||
if not is_valid_relation_name(i):
|
if not is_valid_relation_name(i):
|
||||||
raise Exception(f'"{i}" is not a valid attribute name')
|
raise Exception(_('"%s" is not a valid attribute name') % i)
|
||||||
|
|
||||||
if len(self) != len(set(self)):
|
if len(self) != len(set(self)):
|
||||||
raise Exception('Attribute names must be unique')
|
raise Exception('Attribute names must be unique')
|
||||||
@ -488,12 +489,12 @@ class Header(tuple):
|
|||||||
attrs = list(self)
|
attrs = list(self)
|
||||||
for old, new in params.items():
|
for old, new in params.items():
|
||||||
if not is_valid_relation_name(new):
|
if not is_valid_relation_name(new):
|
||||||
raise Exception(f'{new} is not a valid attribute name')
|
raise Exception(_('%s is not a valid attribute name') % new)
|
||||||
try:
|
try:
|
||||||
id_ = attrs.index(old)
|
id_ = attrs.index(old)
|
||||||
attrs[id_] = new
|
attrs[id_] = new
|
||||||
except:
|
except:
|
||||||
raise Exception(f'Field not found: {old}')
|
raise Exception(_('Field not found: %s') % old)
|
||||||
return Header(attrs)
|
return Header(attrs)
|
||||||
|
|
||||||
def sharedAttributes(self, other: 'Header') -> int:
|
def sharedAttributes(self, other: 'Header') -> int:
|
||||||
|
@ -25,6 +25,7 @@ import keyword
|
|||||||
import re
|
import re
|
||||||
from typing import Union, Set, Any, Callable, Type, Optional
|
from typing import Union, Set, Any, Callable, Type, Optional
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from gettext import gettext as _
|
||||||
|
|
||||||
|
|
||||||
RELATION_NAME_REGEXP = re.compile(r'^[_a-z][_a-z0-9]*$', re.IGNORECASE)
|
RELATION_NAME_REGEXP = re.compile(r'^[_a-z][_a-z0-9]*$', re.IGNORECASE)
|
||||||
@ -83,7 +84,7 @@ class Rdate:
|
|||||||
'''date: A string representing a date YYYY-MM-DD'''
|
'''date: A string representing a date YYYY-MM-DD'''
|
||||||
r = _date_regexp.match(date)
|
r = _date_regexp.match(date)
|
||||||
if not r:
|
if not r:
|
||||||
raise ValueError(f'{date} is not a valid date')
|
raise ValueError(_('%s is not a valid date') % date)
|
||||||
|
|
||||||
year = int(r.group(1))
|
year = int(r.group(1))
|
||||||
month = int(r.group(3))
|
month = int(r.group(3))
|
||||||
|
@ -99,7 +99,7 @@ class creatorForm(QtWidgets.QDialog):
|
|||||||
try:
|
try:
|
||||||
hlist.append(self.table.item(i, j).text())
|
hlist.append(self.table.item(i, j).text())
|
||||||
except:
|
except:
|
||||||
QtWidgets.QMessageBox.information(None, _("Error"), _(f'Unset value in {i + 1},{j + 1}!'))
|
QtWidgets.QMessageBox.information(None, _("Error"), _('Unset value in %d,%d!') % (i + 1, j + 1))
|
||||||
return None
|
return None
|
||||||
content.append(hlist)
|
content.append(hlist)
|
||||||
return relation.Relation.create_from(header, content)
|
return relation.Relation.create_from(header, content)
|
||||||
|
@ -118,7 +118,7 @@ class relForm(QtWidgets.QMainWindow):
|
|||||||
if online is None:
|
if online is None:
|
||||||
r = _('Network error')
|
r = _('Network error')
|
||||||
elif online > version:
|
elif online > version:
|
||||||
r = _(f'New version available online: {online}.')
|
r = _('New version available online: %s.') % online
|
||||||
elif online == version:
|
elif online == version:
|
||||||
r = _('Latest version installed.')
|
r = _('Latest version installed.')
|
||||||
else:
|
else:
|
||||||
|
@ -24,6 +24,7 @@ import os.path
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
from gettext import gettext as _
|
||||||
|
|
||||||
from relational import relation, parser, rtypes
|
from relational import relation, parser, rtypes
|
||||||
from relational import maintenance
|
from relational import maintenance
|
||||||
@ -122,7 +123,7 @@ def load_relation(filename: str, defname: Optional[str]) -> Optional[str]:
|
|||||||
'''
|
'''
|
||||||
if not os.path.isfile(filename):
|
if not os.path.isfile(filename):
|
||||||
print(colorize(
|
print(colorize(
|
||||||
f'{filename} is not a file', ERROR_COLOR), file=sys.stderr)
|
_('%s is not a file') % filename, ERROR_COLOR), file=sys.stderr)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if defname is None:
|
if defname is None:
|
||||||
@ -132,14 +133,14 @@ def load_relation(filename: str, defname: Optional[str]) -> Optional[str]:
|
|||||||
defname = defname[:-4]
|
defname = defname[:-4]
|
||||||
|
|
||||||
if not rtypes.is_valid_relation_name(defname):
|
if not rtypes.is_valid_relation_name(defname):
|
||||||
print(colorize(
|
print(colorize(_(
|
||||||
"%s is not a valid relation name" % defname, ERROR_COLOR), file=sys.stderr)
|
'%s is not a valid relation name') % defname, ERROR_COLOR), file=sys.stderr)
|
||||||
return None
|
return None
|
||||||
try:
|
try:
|
||||||
ui.load(filename, defname)
|
ui.load(filename, defname)
|
||||||
|
|
||||||
completer.add_completion(defname)
|
completer.add_completion(defname)
|
||||||
printtty(colorize("Loaded relation %s" % defname, COLOR_GREEN))
|
printtty(colorize(_('Loaded relation %s') % defname, COLOR_GREEN))
|
||||||
return defname
|
return defname
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(colorize(str(e), ERROR_COLOR), file=sys.stderr)
|
print(colorize(str(e), ERROR_COLOR), file=sys.stderr)
|
||||||
@ -157,14 +158,14 @@ def survey() -> None:
|
|||||||
post[i] = a
|
post[i] = a
|
||||||
response = maintenance.send_survey(post)
|
response = maintenance.send_survey(post)
|
||||||
if response == -1:
|
if response == -1:
|
||||||
print('Yeah, not sending that.')
|
print(_('Yeah, not sending that.'))
|
||||||
|
|
||||||
|
|
||||||
def help(command: str) -> None:
|
def help(command: str) -> None:
|
||||||
'''Prints help on the various functions'''
|
'''Prints help on the various functions'''
|
||||||
p = command.split(' ', 1)
|
p = command.split(' ', 1)
|
||||||
if len(p) == 1:
|
if len(p) == 1:
|
||||||
print(
|
print(_(
|
||||||
'HELP [command]\n'
|
'HELP [command]\n'
|
||||||
'\n'
|
'\n'
|
||||||
'Comments are obtained starting with a ;\n'
|
'Comments are obtained starting with a ;\n'
|
||||||
@ -179,20 +180,20 @@ def help(command: str) -> None:
|
|||||||
'To insert relational operators, type _OPNAME, they will be internally replaced with the correct symbol.\n'
|
'To insert relational operators, type _OPNAME, they will be internally replaced with the correct symbol.\n'
|
||||||
'\n'
|
'\n'
|
||||||
'Rember: completion is enabled and can be very helpful if you can\'t remember something.'
|
'Rember: completion is enabled and can be very helpful if you can\'t remember something.'
|
||||||
)
|
))
|
||||||
return
|
return
|
||||||
cmd = p[1]
|
cmd = p[1]
|
||||||
|
|
||||||
cmdhelp = {
|
cmdhelp = {
|
||||||
'QUIT': 'Quits the program',
|
'QUIT': _('Quits the program'),
|
||||||
'LIST': 'Lists the relations loaded',
|
'LIST': _('Lists the relations loaded'),
|
||||||
'LOAD': 'LOAD filename [relationame]\nLoads a relation into memory',
|
'LOAD': _('LOAD filename [relationame]\nLoads a relation into memory'),
|
||||||
'UNLOAD': 'UNLOAD relationame\nUnloads a relation from memory',
|
'UNLOAD': _('UNLOAD relationame\nUnloads a relation from memory'),
|
||||||
'SAVE': 'SAVE filename relationame\nSaves a relation in a file',
|
'SAVE': _('SAVE filename relationame\nSaves a relation in a file'),
|
||||||
'HELP': 'Prints the help on a command',
|
'HELP': _('Prints the help on a command'),
|
||||||
'SURVEY': 'Fill and send a survey',
|
'SURVEY': _('Fill and send a survey'),
|
||||||
}
|
}
|
||||||
print(cmdhelp.get(cmd, 'Unknown command: %s' % cmd))
|
print(cmdhelp.get(cmd, _('Unknown command: %s') % cmd))
|
||||||
|
|
||||||
|
|
||||||
def exec_line(command: str) -> None:
|
def exec_line(command: str) -> None:
|
||||||
@ -218,7 +219,7 @@ def exec_line(command: str) -> None:
|
|||||||
elif command.startswith('LOAD '): # Loads a relation
|
elif command.startswith('LOAD '): # Loads a relation
|
||||||
pars = command.split(' ')
|
pars = command.split(' ')
|
||||||
if len(pars) == 1:
|
if len(pars) == 1:
|
||||||
print(colorize("Missing parameter", ERROR_COLOR))
|
print(colorize(_("Missing parameter"), ERROR_COLOR))
|
||||||
return
|
return
|
||||||
|
|
||||||
filename = pars[1]
|
filename = pars[1]
|
||||||
@ -230,18 +231,18 @@ def exec_line(command: str) -> None:
|
|||||||
elif command.startswith('UNLOAD '):
|
elif command.startswith('UNLOAD '):
|
||||||
pars = command.split(' ')
|
pars = command.split(' ')
|
||||||
if len(pars) < 2:
|
if len(pars) < 2:
|
||||||
print(colorize("Missing parameter", ERROR_COLOR))
|
print(colorize(_("Missing parameter"), ERROR_COLOR))
|
||||||
elif len(pars) > 2:
|
elif len(pars) > 2:
|
||||||
print(colorize("Too many parameter", ERROR_COLOR))
|
print(colorize(_("Too many parameter"), ERROR_COLOR))
|
||||||
if pars[1] in ui.relations:
|
if pars[1] in ui.relations:
|
||||||
ui.unload(pars[1])
|
ui.unload(pars[1])
|
||||||
completer.remove_completion(pars[1])
|
completer.remove_completion(pars[1])
|
||||||
else:
|
else:
|
||||||
print(colorize("No such relation %s" % pars[1], ERROR_COLOR))
|
print(colorize(_("No such relation %s") % pars[1], ERROR_COLOR))
|
||||||
elif command.startswith('SAVE '):
|
elif command.startswith('SAVE '):
|
||||||
pars = command.split(' ')
|
pars = command.split(' ')
|
||||||
if len(pars) != 3:
|
if len(pars) != 3:
|
||||||
print(colorize("Missing parameter", ERROR_COLOR))
|
print(colorize(_("Missing parameter"), ERROR_COLOR))
|
||||||
return
|
return
|
||||||
|
|
||||||
filename = pars[1]
|
filename = pars[1]
|
||||||
@ -318,9 +319,9 @@ def exec_query(command: str) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def main(files=[]):
|
def main(files=[]):
|
||||||
printtty(colorize('> ', PROMPT_COLOR) + "; Type HELP to get the HELP")
|
printtty(colorize('> ', PROMPT_COLOR) + _("; Type HELP to get the HELP"))
|
||||||
printtty(colorize('> ', PROMPT_COLOR) +
|
printtty(colorize('> ', PROMPT_COLOR) +
|
||||||
"; Completion is activated using the tab (if supported by the terminal)")
|
_("; Completion is activated using the tab (if supported by the terminal)"))
|
||||||
|
|
||||||
for i in files:
|
for i in files:
|
||||||
load_relation(i, None)
|
load_relation(i, None)
|
||||||
|
Loading…
Reference in New Issue
Block a user