From d72f177be0c9da39830ebca4c64c539e2a7bebb7 Mon Sep 17 00:00:00 2001 From: Alex Hall Date: Wed, 2 Aug 2023 20:15:53 +0200 Subject: [PATCH 1/9] Upgrade to Pyodide 0.23.4 (with Python 3.11) and compile dependencies (#603) * Build packages with latest pyodide, compile wheels to use pyc files, output package_filenames.json --- sandbox/pyodide/build_packages.sh | 8 +++++--- sandbox/pyodide/package_filenames.json | 21 +++++++++++++++++++++ sandbox/pyodide/packages.js | 2 ++ sandbox/pyodide/setup.sh | 2 +- 4 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 sandbox/pyodide/package_filenames.json diff --git a/sandbox/pyodide/build_packages.sh b/sandbox/pyodide/build_packages.sh index 2354c831..4cd96b73 100644 --- a/sandbox/pyodide/build_packages.sh +++ b/sandbox/pyodide/build_packages.sh @@ -17,14 +17,16 @@ echo "###############################################################" echo "## Prepare python packages" cd _build/pyodide +git checkout 0.23.4 || (git fetch && git checkout 0.23.4) ./run_docker make cp ../../../requirements3.txt . -./run_docker pyodide build -r requirements3.txt --output-lockfile result.txt -cat result.txt +./run_docker "source emsdk/emsdk/emsdk_env.sh && pyodide build -r requirements3.txt --outdir grist-packages" +./run_docker pyodide py-compile grist-packages cd ../.. echo "" echo "###############################################################" echo "## Copy out python packages" -node ./packages.js _build/pyodide/dist/ _build/packages/ +rm -rf _build/packages/ +node ./packages.js _build/pyodide/grist-packages/ _build/packages/ diff --git a/sandbox/pyodide/package_filenames.json b/sandbox/pyodide/package_filenames.json new file mode 100644 index 00000000..00d88167 --- /dev/null +++ b/sandbox/pyodide/package_filenames.json @@ -0,0 +1,21 @@ +[ + "astroid-2.14.2-cp311-none-any.whl", + "asttokens-2.2.1-cp311-none-any.whl", + "chardet-4.0.0-cp311-none-any.whl", + "et_xmlfile-1.0.1-cp311-none-any.whl", + "executing-1.1.1-cp311-none-any.whl", + "friendly_traceback-0.7.48-cp311-none-any.whl", + "iso8601-0.1.12-cp311-none-any.whl", + "lazy_object_proxy-1.6.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", + "openpyxl-3.0.10-cp311-none-any.whl", + "phonenumberslite-8.12.57-cp311-none-any.whl", + "pure_eval-0.2.2-cp311-none-any.whl", + "python_dateutil-2.8.2-cp311-none-any.whl", + "roman-3.3-cp311-none-any.whl", + "six-1.16.0-cp311-none-any.whl", + "sortedcontainers-2.4.0-cp311-none-any.whl", + "stack_data-0.5.1-cp311-none-any.whl", + "typing_extensions-4.4.0-cp311-none-any.whl", + "unittest_xml_reporting-2.0.0-cp311-none-any.whl", + "wrapt-1.15.0-cp311-none-any.whl" +] \ No newline at end of file diff --git a/sandbox/pyodide/packages.js b/sandbox/pyodide/packages.js index fa0f03c6..bc13726e 100644 --- a/sandbox/pyodide/packages.js +++ b/sandbox/pyodide/packages.js @@ -61,6 +61,8 @@ async function findOnDisk(src, dest) { }); } libs = await listLibs(dest); + fs.writeFileSync(path.join(__dirname, `package_filenames.json`), + JSON.stringify(libs.available.map(lib => lib.fileName), null, 2)); console.log(`Cached`, {libs: libs.available.map(lib => lib.name)}); console.log(`Missing`, {libs: libs.misses.map(lib => lib.name)}); } diff --git a/sandbox/pyodide/setup.sh b/sandbox/pyodide/setup.sh index ce28cdc8..238ed9c5 100755 --- a/sandbox/pyodide/setup.sh +++ b/sandbox/pyodide/setup.sh @@ -10,6 +10,6 @@ if [[ ! -e _build/worker ]]; then mkdir -p _build/worker cd _build/worker yarn init --yes - yarn add pyodide@0.22.1 + yarn add pyodide@0.23.4 cd ../.. fi From 5119ce92cbd8e24bc4fa52c370084ec664c1009c Mon Sep 17 00:00:00 2001 From: Paul Fitzpatrick Date: Wed, 2 Aug 2023 21:29:43 +0100 Subject: [PATCH 2/9] add a version number to precompiled pyodide resources (#607) --- sandbox/pyodide/Makefile | 14 +++++++++++--- sandbox/pyodide/build_packages.sh | 0 2 files changed, 11 insertions(+), 3 deletions(-) mode change 100644 => 100755 sandbox/pyodide/build_packages.sh diff --git a/sandbox/pyodide/Makefile b/sandbox/pyodide/Makefile index 2adc18c5..c2802429 100644 --- a/sandbox/pyodide/Makefile +++ b/sandbox/pyodide/Makefile @@ -1,18 +1,26 @@ +# This number should be bumped up if making a non-additive change +# to python packages. +GRIST_PYODIDE_VERSION = 2 + default: echo "Welcome to the pyodide sandbox" echo "make fetch_packages # gets python packages prepared earlier" echo "make build_packages # build python packages from scratch" echo "make save_packages # upload python packages to fetch later" - echo "setup # get pyodide node package" + echo "make clean_packages # remove local cache of python packages" + echo "setup # get pyodide node package, and python packages" fetch_packages: - node ./packages.js https://s3.amazonaws.com/grist-pynbox/pyodide/packages/ _build/packages/ + node ./packages.js https://s3.amazonaws.com/grist-pynbox/pyodide/packages/v$(GRIST_PYODIDE_VERSION)/ _build/packages/ build_packages: ./build_packages.sh save_packages: - aws s3 sync _build/packages s3://grist-pynbox/pyodide/packages/ + aws s3 sync _build/packages s3://grist-pynbox/pyodide/packages/v$(GRIST_PYODIDE_VERSION) + +clean_packages: + rm -rf _build/packages setup: ./setup.sh diff --git a/sandbox/pyodide/build_packages.sh b/sandbox/pyodide/build_packages.sh old mode 100644 new mode 100755 From 57380190bc9cd3969c0181c5b2b157a3aa8670b3 Mon Sep 17 00:00:00 2001 From: John Cant Date: Wed, 2 Aug 2023 21:49:37 +0100 Subject: [PATCH 3/9] REQUEST with unknown and undetectable encoding (#600) --- sandbox/grist/functions/info.py | 4 ++-- sandbox/grist/test_requests.py | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/sandbox/grist/functions/info.py b/sandbox/grist/functions/info.py index 99ab6424..a230af30 100644 --- a/sandbox/grist/functions/info.py +++ b/sandbox/grist/functions/info.py @@ -740,12 +740,12 @@ class Response(object): """ Similar to the Response class from the `requests` library. """ - def __init__(self, content, status, statusText, headers, encoding): + def __init__(self, content, status, statusText, headers, encoding=None): self.content = content # raw bytes self.status_code = status # e.g. 404 self.reason = statusText # e.g. "Not Found" self.headers = CaseInsensitiveDict(headers) - self.encoding = encoding or self.apparent_encoding + self.encoding = encoding or self.apparent_encoding or "utf-8" @property def text(self): diff --git a/sandbox/grist/test_requests.py b/sandbox/grist/test_requests.py index d5960f6b..86c4cfd3 100644 --- a/sandbox/grist/test_requests.py +++ b/sandbox/grist/test_requests.py @@ -73,6 +73,13 @@ class TestResponse(unittest.TestCase): self.assertEqual(r.content, content) self.assertEqual(r.text, text) + def test_unknown_undetectable_encoding(self): + content = b'' + r = Response(content, 200, "OK", {}, encoding=None) + + # Not knowing the encoding should not break text + self.assertEqual(r.text, "") + class TestRequestsPostInterface(unittest.TestCase): def test_no_post_args(self): From b631dcfe1b5f6cd579e32a366d2344aae4828ae8 Mon Sep 17 00:00:00 2001 From: Riccardo Polignieri Date: Tue, 1 Aug 2023 19:37:03 +0000 Subject: [PATCH 4/9] Translated using Weblate (Italian) Currently translated at 100.0% (927 of 927 strings) Translation: Grist/client Translate-URL: https://hosted.weblate.org/projects/grist/client/it/ --- static/locales/it.client.json | 97 ++++++++++++++++++++++++++++++++--- 1 file changed, 91 insertions(+), 6 deletions(-) diff --git a/static/locales/it.client.json b/static/locales/it.client.json index 43f8f251..eb7dc172 100644 --- a/static/locales/it.client.json +++ b/static/locales/it.client.json @@ -289,7 +289,11 @@ "Errors in {{numErrors}} of {{numCells}} cells": "Errori in {{numErrors}} su {{numCells}} celle", "Column or field is required": "Richiesta una colonna o un campo", "Errors in all {{numErrors}} cells": "Errori in {{numErrors}} celle", - "editingFormula is required": "editingFormula è necessario" + "editingFormula is required": "editingFormula è necessario", + "Enter formula or {{button}}.": "Inserisci una formula o {{button}}.", + "Enter formula.": "Inserisci una formula.", + "Expand Editor": "Espandi l'editor", + "use AI Assistant": "usa l'assistente IA" }, "FieldEditor": { "It should be impossible to save a plain data value into a formula column": "Non dovrebbe essere possibile salvare un valore semplice in una colonna di formule", @@ -445,7 +449,9 @@ "Type a message...": "Inserisci un messaggio…", "User Attributes": "Attributi dell'utente", "Seed rules": "Regole pre-inserite", - "When adding table rules, automatically add a rule to grant OWNER full access.": "Quando si mettono regole per la tabella, inserire sempre una che dà pieno accesso a OWNER." + "When adding table rules, automatically add a rule to grant OWNER full access.": "Quando si mettono regole per la tabella, inserire sempre una che dà pieno accesso a OWNER.", + "This default should be changed if editors' access is to be limited. ": "Questo valore di default può essere cambiato se si vuole limitare l'accesso agli editor. ", + "Allow editors to edit structure (e.g. modify and delete tables, columns, layouts), and to write formulas, which give access to all data regardless of read restrictions.": "Permette agli editor di modificare la struttura (es., modificare ed eliminare tabelle, colonne, viste) e scrivere formule, cosa che permette l'accesso ai dati indipendentemente dalle restrizioni in lettura." }, "ACUserManager": { "Enter email address": "Inserisci indirizzo e-mail", @@ -785,7 +791,8 @@ "Send to Google Drive": "Invia a Google Drive", "Show in folder": "Mostra nella cartella", "Unsaved": "Non salvato", - "Work on a Copy": "Lavora su una copia" + "Work on a Copy": "Lavora su una copia", + "Share": "Condividi" }, "SiteSwitcher": { "Create new team site": "Crea un nuovo sito per il team", @@ -908,7 +915,8 @@ "Find Next ": "Trova successivo ", "Find Previous ": "Trova precedente ", "No results": "Nessun risultato", - "Search in document": "Cerca nel documento" + "Search in document": "Cerca nel documento", + "Search": "Cerca" }, "sendToDrive": { "Sending file to Google Drive": "Invio i file a Google Drive" @@ -979,7 +987,9 @@ "Access rules give you the power to create nuanced rules to determine who can see or edit which parts of your document.": "Le regole di accesso ti danno il potere di creare regole sofisticate per decidere chi può vedere o modificare il tuo documento, e quali parti.", "Reference columns are the key to {{relational}} data in Grist.": "Le colonne con riferimenti sono il motore {{relational}} dei dati in Grist.", "Anchor Links": "Link interno", - "Custom Widgets": "Widget personalizzati" + "Custom Widgets": "Widget personalizzati", + "You can choose one of our pre-made widgets or embed your own by providing its full URL.": "Puoi scegliere uno dei nostri widget pronti all'uso, o inserirne uno fatto da te, immettendo la sua URL completa.", + "To make an anchor link that takes the user to a specific cell, click on a row and press {{shortcut}}.": "Per creare un link che porta l'utente a una cella specifica, fai clic su una riga e premi {{shortcut}}." }, "DescriptionConfig": { "DESCRIPTION": "DESCRIZIONE" @@ -1031,7 +1041,20 @@ "Save": "Salva", "Tips": "Suggerimenti", "Grist's AI Formula Assistance. ": "Assistenza dalla IA di Grist per le formule. ", - "See our {{helpFunction}} and {{formulaCheat}}, or visit our {{community}} for more help.": "Vedi {{helpFunction}} e {{formulaCheat}}, o visita la {{community}} per ulteriore aiuto." + "See our {{helpFunction}} and {{formulaCheat}}, or visit our {{community}} for more help.": "Vedi {{helpFunction}} e {{formulaCheat}}, o visita la {{community}} per ulteriore aiuto.", + "Cancel": "Annulla", + "Clear Conversation": "Cancella conversazione", + "AI Assistant": "Assistente IA", + "Apply": "Applica", + "Code View": "Vista codice", + "Hi, I'm the Grist Formula AI Assistant.": "Ciao, sono l'assistente IA per le formule di Grist.", + "I can only help with formulas. I cannot build tables, columns, and views, or write access rules.": "Posso solo aiutare con le formule. Non posso costruire tabelle, colonne e viste, o scrivere regole di accesso.", + "Learn more": "Per saperne di più", + "Press Enter to apply suggested formula.": "Premi Invio per applicare la formula suggerita.", + "Sign Up for Free": "Iscriviti gratis", + "There are some things you should know when working with me:": "Ecco alcune cose da sapere quando lavori con me:", + "What do you need help with?": "In che cosa posso aiutarti?", + "Sign up for a free Grist account to start using the Formula AI Assistant.": "Iscriviti a un account gratuito di Grist per usare l'Assistente IA per le formule." }, "GridView": { "Click to insert": "Clicca per inserire" @@ -1072,5 +1095,67 @@ "No row selected in {{title}}": "Nessuna riga selezionata in {{title}}", "Not all data is shown": "Non tutti i dati sono mostrati", "No data": "Nessun dato" + }, + "DescriptionTextArea": { + "DESCRIPTION": "DESCRIZIONE" + }, + "UserManager": { + "Add {{member}} to your team": "Aggiungi {{member}} al tuo team", + "Allow anyone with the link to open.": "Consenti l'accesso a chiunque ha il link.", + "Anyone with link ": "Chiunque ha il link ", + "Cancel": "Annulla", + "Copy Link": "Copia link", + "Create a team to share with more people": "Crea un team per condividere con più persone", + "Grist support": "Supporto di Grist", + "Guest": "Ospite", + "Invite multiple": "Invita più persone", + "Invite people to {{resourceType}}": "Invita delle persone a {{resourceType}}", + "Link copied to clipboard": "Link copiato negli Appunti", + "Off": "Spento", + "Manage members of team site": "Gestisci i membri del tuo team", + "No default access allows access to be granted to individual documents or workspaces, rather than the full team site.": "Nessun accesso di default, permette di autorizzare l'accesso a singoli documenti o spazi di lavoro, invece che a tutto il sito del team.", + "On": "Acceso", + "Once you have removed your own access, you will not be able to get it back without assistance from someone else with sufficient access to the {{name}}.": "Se togli l'accesso a te stesso, non potrai riaverlo senza l'aiuto di qualcuno con permessi sufficienti a {{name}}.", + "Open Access Rules": "Apri le regole di accesso", + "Outside collaborator": "Collaboratore esterno", + "Public Access": "Accesso pubblico", + "Public access: ": "Accesso pubblico: ", + "Public access": "Accesso pubblico", + "User inherits permissions from {{parent})}. To remove, set 'Inherit access' option to 'None'.": "L'utente eredita i permessi da {{parent})}. Per rimuoverli, imposta l'opzione 'Eredita l'accesso' a 'Nessuno'.", + "User inherits permissions from {{parent}}. To remove, set 'Inherit access' option to 'None'.": "L'utente eredita i permessi da {{parent}}. Per rimuoverli, imposta l'opzione 'Eredita l'accesso' a 'Nessuno'.", + "You are about to remove your own access to this {{resourceType}}": "Stai per rimuovere il tuo stesso accesso da questa {{resourceType}}", + "Close": "Chiudi", + "Collaborator": "Collaboratore", + "Remove my access": "Rimuovi il mio accesso", + "Confirm": "Conferma", + "Save & ": "Salva e ", + "Public access inherited from {{parent}}. To remove, set 'Inherit access' option to 'None'.": "Accesso pubblico ereditato da {{parent}}. Per rimuoverlo, imposta l'opzione 'Eredita l'accesso' a 'Nessuno'.", + "Team member": "Membro del team", + "User may not modify their own access.": "L'utente non può modificare le sue stesse opzioni di accesso.", + "Your role for this team site": "Il tuo ruolo per questo sito del team", + "Your role for this {{resourceType}}": "Il tuo ruolo per {{resourceType}}", + "free collaborator": "collaboratore libero", + "guest": "ospite", + "member": "membro", + "team site": "sito del team", + "{{collaborator}} limit exceeded": "limite superato per {{collaborator}}", + "{{limitAt}} of {{limitTop}} {{collaborator}}s": "{{limitAt}} di {{limitTop}} {{collaborator}}", + "No default access allows access to be granted to individual documents or workspaces, rather than the full team site.": "Nessun accesso di default, permette di autorizzare l'accesso a singoli documenti o spazi di lavoro, invece che a tutto il sito del team.", + "Once you have removed your own access, you will not be able to get it back without assistance from someone else with sufficient access to the {{resourceType}}.": "Se togli l'accesso a te stesso, non potrai riaverlo senza l'aiuto di qualcuno con permessi sufficienti a {{resourceType}}.", + "User has view access to {{resource}} resulting from manually-set access to resources inside. If removed here, this user will lose access to resources inside.": "L'utente può visualizzare {{resource}} a causa di regole di accesso alle risorse interne impostate manualmente. Se rimuovi qui, l'utente perderà l'accesso alle risorse interne." + }, + "SearchModel": { + "Search all pages": "Cerca in tutte le pagine", + "Search all tables": "Cerca in tutte le tabelle" + }, + "searchDropdown": { + "Search": "Cerca" + }, + "FloatingEditor": { + "Collapse Editor": "Contrai l'editor" + }, + "FloatingPopup": { + "Maximize": "Espandi", + "Minimize": "Riduci" } } From d12d971162c451dd6fb0b42878f2aec50a351e8f Mon Sep 17 00:00:00 2001 From: Paul Fitzpatrick Date: Wed, 2 Aug 2023 22:30:22 +0100 Subject: [PATCH 5/9] Update README.md (#606) Mention AI formula assistant, and outgoing webhooks. --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 11671716..793fb4cf 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Here are some specific feature highlights of Grist: - Any tool that can read SQLite can read numeric and text data from a Grist file. - Great format for [backups](https://support.getgrist.com/exports/#backing-up-an-entire-document) that you can be confident you can restore in full. - Great format for moving between different hosts. - - Can be displayed on a static website with [grist-static](https://github.com/gristlabs/grist-static). + - Can be displayed on a static website with [grist-static](https://github.com/gristlabs/grist-static), no special server needed. - There's a self-contained desktop app available for viewing and editing: [grist-electron](https://github.com/gristlabs/grist-electron). * Convenient editing and formatting features. - Choices and [choice lists](https://support.getgrist.com/col-types/#choice-list-columns), for adding colorful tags to records without fuss. @@ -65,6 +65,7 @@ Here are some specific feature highlights of Grist: - A [REST API](https://support.getgrist.com/api/), [Zapier actions/triggers](https://support.getgrist.com/integrators/#integrations-via-zapier), and support from similar [integrators](https://support.getgrist.com/integrators/). - Import/export to Google drive, Excel format, CSV. - Can link data with custom widgets hosted externally. + - You can set up outgoing webhooks. * [Many templates](https://templates.getgrist.com/) to get you started, from investment research to organizing treasure hunts. * Access control options. - (You'll need SSO logins set up to make use of these options; [grist-omnibus](https://github.com/gristlabs/grist-omnibus) has a prepackaged solution if configuring this feels daunting) @@ -78,8 +79,11 @@ Here are some specific feature highlights of Grist: [gVisor](https://github.com/google/gvisor) sandboxing at the individual document level. - On OSX, you can use native sandboxing. - - On any OS, including Windows, you can use a wasm-based sandbox. + - On any OS, including Windows, you can use a wasm-based sandbox. * Translated to many languages. + * Support for an AI Formula Assistant (using OpenAI gpt-3.5-turbo). + * `F1` key brings up some quick help. This used to go without saying. In general Grist has good keyboard support. + * We post progress on [𝕏 or Twitter or whatever](https://twitter.com/getgrist). If you are curious about where Grist is going heading, see [our roadmap](https://github.com/gristlabs/grist-core/projects/1), drop a From 08e7f24ff8fe22db23a0b87d6f1bd5cc6b93b5cc Mon Sep 17 00:00:00 2001 From: Paul Fitzpatrick Date: Thu, 3 Aug 2023 11:52:58 -0400 Subject: [PATCH 6/9] v1.1.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 149c5614..b053450e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grist-core", - "version": "1.1.2", + "version": "1.1.3", "license": "Apache-2.0", "description": "Grist is the evolution of spreadsheets", "homepage": "https://github.com/gristlabs/grist-core", From bbb5bd12c09caa88553b5c36fdde562e642a8731 Mon Sep 17 00:00:00 2001 From: Paul Janzen Date: Wed, 2 Aug 2023 22:56:40 +0000 Subject: [PATCH 7/9] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (932 of 932 strings) Translation: Grist/client Translate-URL: https://hosted.weblate.org/projects/grist/client/pt_BR/ --- static/locales/pt_BR.client.json | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/static/locales/pt_BR.client.json b/static/locales/pt_BR.client.json index e914b9aa..4cd8b231 100644 --- a/static/locales/pt_BR.client.json +++ b/static/locales/pt_BR.client.json @@ -77,7 +77,10 @@ "Activation": "Ativação", "Billing Account": "Conta de faturamento", "Support Grist": "Suporte Grist", - "Upgrade Plan": "Atualizar o Plano" + "Upgrade Plan": "Atualizar o Plano", + "Sign Up": "Cadastre-se", + "Use This Template": "Use este modelo", + "Sign In": "Ingressar" }, "ActionLog": { "Action Log failed to load": "Falha ao carregar o Log de Ações", @@ -108,7 +111,8 @@ "Home Page": "Página inicial", "Legacy": "Legado", "Personal Site": "Site pessoal", - "Team Site": "Site da Equipe" + "Team Site": "Site da Equipe", + "Grist Templates": "Modelos de Grist" }, "AppModel": { "This team site is suspended. Documents can be read, but not modified.": "Este site da equipe está suspenso. Os documentos podem ser lidos, mas não modificados." @@ -428,7 +432,8 @@ "GristDoc": { "Added new linked section to view {{viewName}}": "Adicionada nova seção vinculada para visualizar {{viewName}}}", "Import from file": "Importação de arquivo", - "Saved linked section {{title}} in view {{name}}": "Seção vinculada salva {{title}} em exibição {{name}}" + "Saved linked section {{title}} in view {{name}}": "Seção vinculada salva {{title}} em exibição {{name}}", + "go to webhook settings": "ir para configurações webhook" }, "HomeIntro": { ", or find an expert via our ": ", ou encontre um especialista através do nosso", @@ -1114,8 +1119,8 @@ "Hi, I'm the Grist Formula AI Assistant.": "Olá, sou o Assistente de IA de Fórmula Grist.", "I can only help with formulas. I cannot build tables, columns, and views, or write access rules.": "Só posso ajudar com fórmulas. Não posso criar tabelas, colunas e exibições, nem escrever regras de acesso.", "Press Enter to apply suggested formula.": "Pressione Enter para aplicar a fórmula sugerida.", - "Sign Up for Free": "Inscreva-se gratuitamente", - "Sign up for a free Grist account to start using the Formula AI Assistant.": "Inscreva-se para uma conta gratuita do Grist para começar a usar o Assistente de Fórmula AI.", + "Sign Up for Free": "Cadastre-se gratuitamente", + "Sign up for a free Grist account to start using the Formula AI Assistant.": "Cadastre-se para uma conta gratuita do Grist para começar a usar o Assistente de Fórmula AI.", "What do you need help with?": "Em que você precisa de ajuda?", "There are some things you should know when working with me:": "Há algumas coisas que você deve saber ao trabalhar comigo:", "Learn more": "Saiba mais" From 08047d299f695393c73af035c5e159def3fa35cb Mon Sep 17 00:00:00 2001 From: Paul Janzen Date: Wed, 2 Aug 2023 22:58:47 +0000 Subject: [PATCH 8/9] Translated using Weblate (Spanish) Currently translated at 100.0% (932 of 932 strings) Translation: Grist/client Translate-URL: https://hosted.weblate.org/projects/grist/client/es/ --- static/locales/es.client.json | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/static/locales/es.client.json b/static/locales/es.client.json index 2c988107..23fe6885 100644 --- a/static/locales/es.client.json +++ b/static/locales/es.client.json @@ -72,7 +72,10 @@ "Activation": "Activación", "Billing Account": "Cuenta de facturación", "Support Grist": "Soporte Grist", - "Upgrade Plan": "Actualizar el Plan" + "Upgrade Plan": "Actualizar el Plan", + "Sign In": "Ingresar", + "Sign Up": "Regístrate", + "Use This Template": "Usa esta plantilla" }, "AddNewButton": { "Add New": "Agregar Nuevo" @@ -97,7 +100,8 @@ "Home Page": "Portada", "Legacy": "Legado", "Personal Site": "Sitio Personal", - "Team Site": "Sitio de Equipo" + "Team Site": "Sitio de Equipo", + "Grist Templates": "Plantillas Grist" }, "CellContextMenu": { "Clear cell": "Borrar celda", @@ -699,7 +703,8 @@ "GristDoc": { "Added new linked section to view {{viewName}}": "Añadido nueva sección vinculada a la vista {{viewName}}", "Import from file": "Importar desde archivo", - "Saved linked section {{title}} in view {{name}}": "Sección vinculada guardada {{title}} a la vista {{name}}" + "Saved linked section {{title}} in view {{name}}": "Sección vinculada guardada {{title}} a la vista {{name}}", + "go to webhook settings": "ir a la configuración webhook" }, "ACUserManager": { "Enter email address": "Introduzca la dirección de correo electrónico", From 8192631ed190356022963fbe617b08405ed66762 Mon Sep 17 00:00:00 2001 From: Paul Janzen Date: Wed, 2 Aug 2023 23:00:34 +0000 Subject: [PATCH 9/9] Translated using Weblate (German) Currently translated at 100.0% (932 of 932 strings) Translation: Grist/client Translate-URL: https://hosted.weblate.org/projects/grist/client/de/ --- static/locales/de.client.json | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/static/locales/de.client.json b/static/locales/de.client.json index 997b8d88..631117ae 100644 --- a/static/locales/de.client.json +++ b/static/locales/de.client.json @@ -77,7 +77,10 @@ "Activation": "Aktivierung", "Billing Account": "Abrechnungskonto", "Support Grist": "Grist Support", - "Upgrade Plan": "Upgrade-Plan" + "Upgrade Plan": "Upgrade-Plan", + "Sign Up": "Registrieren Sie sich", + "Use This Template": "Diese Vorlage verwenden", + "Sign In": "Anmelden" }, "ActionLog": { "Action Log failed to load": "Aktionsprotokoll konnte nicht geladen werden", @@ -108,7 +111,8 @@ "Home Page": "Startseite", "Legacy": "Hinterlassenschaft", "Personal Site": "Persönliche Seite", - "Team Site": "Teamseite" + "Team Site": "Teamseite", + "Grist Templates": "Grist Vorlagen" }, "AppModel": { "This team site is suspended. Documents can be read, but not modified.": "Diese Teamseite ist gesperrt. Die Dokumente können gelesen, aber nicht geändert werden." @@ -428,7 +432,8 @@ "GristDoc": { "Added new linked section to view {{viewName}}": "Neuer verlinkter Abschnitt zur Ansicht hinzugefügt {{viewName}}", "Import from file": "Aus Datei importieren", - "Saved linked section {{title}} in view {{name}}": "Gespeicherter verlinkter Abschnitt {{title}} in Ansicht {{name}}" + "Saved linked section {{title}} in view {{name}}": "Gespeicherter verlinkter Abschnitt {{title}} in Ansicht {{name}}", + "go to webhook settings": "gehen sie zu webhook Einstellungen" }, "HomeIntro": { ", or find an expert via our ": ", oder finden Sie einen Experten über unseren",