From c9489e4a61fe8338dee8ed3d9701beef440546b6 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Mon, 7 Aug 2023 18:39:14 -0400 Subject: [PATCH 1/8] Fix ManyFetches test, and include into grist-core a needed upgrade to the 'ws' package. (#614) This is a follow-up fix to https://github.com/gristlabs/grist-core/commit/526a5df157489b6debfbd8e768439b722477de3a. --- package.json | 2 +- test/server/lib/ManyFetches.ts | 5 +++-- yarn.lock | 15 ++++----------- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index b053450e..4a67584b 100644 --- a/package.json +++ b/package.json @@ -182,7 +182,7 @@ "underscore": "1.12.1", "uuid": "3.3.2", "winston": "2.4.5", - "ws": "6.2.2" + "ws": "8.13.0" }, "resolutions": { "jquery": "3.5.0", diff --git a/test/server/lib/ManyFetches.ts b/test/server/lib/ManyFetches.ts index af0f3cc0..11a6f7c5 100644 --- a/test/server/lib/ManyFetches.ts +++ b/test/server/lib/ManyFetches.ts @@ -2,6 +2,7 @@ import {GristWSConnection} from 'app/client/components/GristWSConnection'; import {TableFetchResult} from 'app/common/ActiveDocAPI'; import {UserAPIImpl} from 'app/common/UserAPI'; import {delay} from 'app/common/delay'; +import {cookieName} from 'app/server/lib/gristSessions'; import * as log from 'app/server/lib/log'; import {getGristConfig} from 'test/gen-server/testUtils'; import {prepareDatabase} from 'test/server/lib/helpers/PrepareDatabase'; @@ -159,13 +160,13 @@ describe('ManyFetches', function() { async function prepareGristWSConnection(docId: string): Promise<() => GristWSConnection> { // Use cookies for access to stay as close as possible to regular operation. const resp = await fetch(`${home.serverUrl}/test/session`); - const sid = cookie.parse(resp.headers.get('set-cookie')).grist_sid; + const sid = cookie.parse(resp.headers.get('set-cookie'))[cookieName]; if (!sid) { throw new Error('no session available'); } await home.testingHooks.setLoginSessionProfile(sid, {name: userName, email}, org); // Load the document html. const pageUrl = `${home.serverUrl}/o/docs/doc/${docId}`; - const headers = {Cookie: `grist_sid=${sid}`}; + const headers = {Cookie: `${cookieName}=${sid}`}; const doc = await fetch(pageUrl, {headers}); const pageBody = await doc.text(); diff --git a/yarn.lock b/yarn.lock index 37d61912..158b1b93 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1653,11 +1653,6 @@ assertion-error@^1.1.0: resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - async-mutex@0.2.4: version "0.2.4" resolved "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.4.tgz" @@ -8866,12 +8861,10 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@6.2.2: - version "6.2.2" - resolved "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== ws@^7.3.1: version "7.4.4" From 26084205d588f2298ec0646c96f151f71082c1c2 Mon Sep 17 00:00:00 2001 From: Camille L Date: Tue, 8 Aug 2023 12:33:16 +0000 Subject: [PATCH 2/8] Translated using Weblate (French) Currently translated at 95.5% (894 of 936 strings) Translation: Grist/client Translate-URL: https://hosted.weblate.org/projects/grist/client/fr/ --- static/locales/fr.client.json | 140 +++++++++++++++++++++++++++++++--- 1 file changed, 129 insertions(+), 11 deletions(-) diff --git a/static/locales/fr.client.json b/static/locales/fr.client.json index 3cb63397..ed993338 100644 --- a/static/locales/fr.client.json +++ b/static/locales/fr.client.json @@ -77,7 +77,10 @@ "Upgrade Plan": "Version Premium", "Support Grist": "Centre d'aide", "Billing Account": "Facturation", - "Activation": "Activer" + "Activation": "Activer", + "Sign In": "Se connecter", + "Sign Up": "S'inscrire", + "Use This Template": "Utiliser ce modèle" }, "ActionLog": { "Action Log failed to load": "Impossible de charger le journal des actions", @@ -108,7 +111,8 @@ "Home Page": "Page d’accueil", "Legacy": "Ancienne version", "Personal Site": "Espace personnel", - "Team Site": "Espace d'équipe" + "Team Site": "Espace d'équipe", + "Grist Templates": "Modèles Grist" }, "AppModel": { "This team site is suspended. Documents can be read, but not modified.": "Le site de cette équipe est suspendu. Les documents peuvent être lus, mais pas modifiés." @@ -394,7 +398,8 @@ "GristDoc": { "Import from file": "Importer depuis un fichier", "Added new linked section to view {{viewName}}": "Création d'une nouvelle section à la page {{viewName}}", - "Saved linked section {{title}} in view {{name}}": "Section liée {{title}} sauvegardée dans la page {{name}}" + "Saved linked section {{title}} in view {{name}}": "Section liée {{title}} sauvegardée dans la page {{name}}", + "go to webhook settings": "Aller aux paramétrages des points d’ancrage Web" }, "HomeIntro": { "Sign up": "S'inscrire", @@ -439,7 +444,11 @@ "Importer": { "Update existing records": "Mettre à jour les enregistrements existants", "Merge rows that match these fields:": "Fusionner les lignes si ces champs correspondent :", - "Select fields to match on": "Sélectionner les champs pour l'appairage" + "Select fields to match on": "Sélectionner les champs pour l'appairage", + "{{count}} unmatched field in import_one": "{{count}} champ non apparié dans l'importation", + "{{count}} unmatched field in import_other": "{{count}} champs non appariés dans l'importation", + "{{count}} unmatched field_one": "{{count}} champ non apparié", + "{{count}} unmatched field_other": "{{count}} champs non appariés" }, "LeftPanelCommon": { "Help Center": "Centre d'aide" @@ -798,7 +807,8 @@ "Search in document": "Rechercher dans le document", "No results": "Aucun résultat", "Find Next ": "Rechercher suivant ", - "Find Previous ": "Rechercher le précédent " + "Find Previous ": "Rechercher le précédent ", + "Search": "Chercher" }, "sendToDrive": { "Sending file to Google Drive": "Envoi en cours vers Google Drive" @@ -925,7 +935,11 @@ "Error in the cell": "Erreur dans la cellule", "Column or field is required": "Colonne ou champ requis", "Errors in {{numErrors}} of {{numCells}} cells": "Erreur dans {{numErrors}} des {{numCells}} cellules", - "editingFormula is required": "editingFormula est nécessaire" + "editingFormula is required": "editingFormula est nécessaire", + "Enter formula or {{button}}.": "Saisir la formule ou {{button}}.", + "Enter formula.": "Saisir la formule.", + "Expand Editor": "Élargir l'éditeur", + "use AI Assistant": "Utiliser l'assistance IA" }, "NumericTextBox": { "Decimals": "Décimales", @@ -984,7 +998,9 @@ "Use the 𝚺 icon to create summary (or pivot) tables, for totals or subtotals.": "Utilisez l'icône 𝚺 pour créer des tables récapitulatives (ou tables croisées dynamiques), pour les totaux ou les sous-totaux.", "Unpin to hide the the button while keeping the filter.": "Détachez pour cacher le bouton tout en conservant le filtre.", "Anchor Links": "Ancres", - "Custom Widgets": "Vues personnalisées" + "Custom Widgets": "Vues personnalisées", + "To make an anchor link that takes the user to a specific cell, click on a row and press {{shortcut}}.": "Pour créer un lien d'ancrage qui amène l'utilisateur à une cellule spécifique, cliquez sur une ligne et appuyez sur {{shortcut}}.", + "You can choose one of our pre-made widgets or embed your own by providing its full URL.": "Vous pouvez choisir l'une de nos vues prédéfinis ou intégrer la vôtre en indiquant son URL complète." }, "ColumnTitle": { "Add description": "Ajouter une description", @@ -1024,13 +1040,39 @@ "Grist's AI Formula Assistance. ": "Assistance des formules de l'IA de Grist ", "Ask the bot.": "Demandez au bot.", "Function List": "Liste des fonctions", - "Tips": "Conseils" + "Tips": "Conseils", + "Save": "Sauvegarder", + "Data": "Données", + "Formula Cheat Sheet": "Aide-mémoire pour les formules", + "Grist's AI Assistance": "Assistance IA de Grist", + "Need help? Our AI assistant can help.": "Besoin d'aide ? Notre assistant IA peut aider.", + "New Chat": "Nouveau Chat", + "Preview": "Aperçu", + "Regenerate": "Régénérer", + "See our {{helpFunction}} and {{formulaCheat}}, or visit our {{community}} for more help.": "Allez voir notre {{helpFunction}}, notre {{formulaCheat}} ou notre {{community}} pour obtenir plus d'aide.", + "AI Assistant": "Assistant IA", + "Apply": "Appliquer", + "Cancel": "Annuler", + "Hi, I'm the Grist Formula AI Assistant.": "Bonjour, je suis l'assistant IA de Grist pour les formules", + "I can only help with formulas. I cannot build tables, columns, and views, or write access rules.": "Je peux aider seulement pour les formules, je ne peut pas créer de tables, de colonnes, de vue ou gérer les droits d'accès.", + "Learn more": "En apprendre plus", + "Clear Conversation": "Effacer la conversation", + "Code View": "Vue du code", + "Press Enter to apply suggested formula.": "Appuyer sur entrer pour appliquer la formule suggérée.", + "Sign Up for Free": "S'inscrire gratuitement", + "Sign up for a free Grist account to start using the Formula AI Assistant.": "Créez un compte Grist gratuit pour commencer à utiliser l'assistant IA des formules.", + "There are some things you should know when working with me:": "Il y a certaines choses que vous devez savoir lorsque vous travaillez avec moi :", + "Capabilities": "Capacités", + "Community": "Communauté", + "Formula Help. ": "Aide pour les formules. ", + "What do you need help with?": "Quel est votre besoin d'aide ?" }, "SupportGristNudge": { "Help Center": "Centre d'aide", "Close": "Fermer", "Contribute": "Contribuer", - "Support Grist": "Support Grist" + "Support Grist": "Support Grist", + "Opt in to Telemetry": "S'inscrire à Telemetry" }, "GridView": { "Click to insert": "Cliquer pour insérer" @@ -1039,9 +1081,85 @@ "GitHub": "GitHub", "Help Center": "Centre d'aide", "Home": "Accueil", - "Sponsor Grist Labs on GitHub": "Sponsoriser Grist Labs sur GitHub" + "Sponsor Grist Labs on GitHub": "Sponsoriser Grist Labs sur GitHub", + "GitHub Sponsors page": "Page de sponsors GitHub", + "Manage Sponsorship": "Gérer le parrainage", + "Opt in to Telemetry": "S'inscrire à Telemetry", + "Opt out of Telemetry": "S'inscrire à Telemetry", + "Support Grist": "Support Grist", + "Telemetry": "Telemetry", + "This instance is opted in to telemetry. Only the site administrator has permission to change this.": "Cette instance est autorisée à utiliser la télémétrie. Seul l'administrateur de l'espace est autorisé à modifier ce paramètre.", + "This instance is opted out of telemetry. Only the site administrator has permission to change this.": "Cette instance est autorisée à utiliser la télémétrie. Seul l'administrateur de l'espace est autorisé à modifier ce paramètre." }, "buildViewSectionDom": { - "No data": "Aucune donnée" + "No data": "Aucune donnée", + "No row selected in {{title}}": "Aucune ligne sélectionnée dans {{title}}", + "Not all data is shown": "Toute la donnée n'est pas visible" + }, + "UserManager": { + "Allow anyone with the link to open.": "Permettre à toute personne possédant le lien de l'ouvrir.", + "Anyone with link ": "Toute personne possédant le lien ", + "Cancel": "Annuler", + "Close": "Fermer", + "Add {{member}} to your team": "Ajouter des {{member}} à votre équipe", + "Confirm": "Confirmer", + "member": "membre", + "{{collaborator}} limit exceeded": "la limite de {{collaborator}} a été atteinte", + "{{limitAt}} of {{limitTop}} {{collaborator}}s": "{{limitAt}} sur {{limitTop}} {{collaborator}}s", + "User inherits permissions from {{parent}}. To remove, set 'Inherit access' option to 'None'.": "L'utilisateur hérite des autorisations de {{parent}}. Pour les supprimer, réglez l'option \"Hériter de l'accès\" sur \"Aucun\".", + "team site": "espace d'équipe", + "Collaborator": "Collaborateur", + "Copy Link": "Copier le lien", + "Create a team to share with more people": "Créer une équipe pour partager avec plus de personnes", + "Grist support": "Support Grist", + "Guest": "Invité", + "Invite multiple": "Invitation multiple", + "Invite people to {{resourceType}}": "Inviter des personnes à {{resourceType}}", + "Link copied to clipboard": "Lien copié dans le presse-papiers", + "Manage members of team site": "Gérer les membres de l'espace d'équipe", + "No default access allows access to be granted to individual documents or workspaces, rather than the full team site.": "L'absence d'accès par défaut permet d'accorder l'accès à des documents ou à des espaces de travail spécifiques, plutôt qu'à l'ensemble de l'espace d'équipe.", + "Off": "Off", + "On": "On", + "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}}.": "Une fois que vous avez supprimé votre propre accès, vous ne pourrez pas le récupérer sans l'aide d'une autre personne disposant d'un accès suffisant au {{name}}.", + "Open Access Rules": "Ouvrir les règles d'accès", + "Outside collaborator": "Collaborateur externe", + "Public Access": "Accès public", + "Public access": "Accès public", + "Public access inherited from {{parent}}. To remove, set 'Inherit access' option to 'None'.": "L'accès public hérite de {{parent}}. Pour le supprimer, changer l'option 'Accès hérité' à 'Aucun'", + "Public access: ": "Accès public : ", + "Remove my access": "Supprimer mon accès", + "Save & ": "Sauvegarder & ", + "Team member": "Membres", + "User may not modify their own access.": "L'utilisateur ne peut pas modifier son propre accès.", + "Your role for this team site": "Votre rôle pour cet espace d'équipe", + "Your role for this {{resourceType}}": "Votre rôle pour cet {{resourceType}}", + "free collaborator": "Collaborateur gratuit", + "guest": "invité", + "No default access allows access to be granted to individual documents or workspaces, rather than the full team site.": "L'absence d'accès par défaut permet d'accorder l'accès à des documents ou à des espaces de travail spécifiques, plutôt qu'à l'ensemble de l'espace d'équipe.", + "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}}.": "Une fois que vous avez supprimé votre propre accès, vous ne pourrez pas le récupérer sans l'aide d'une autre personne disposant d'un accès suffisant au {{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'utilisateur a un accès visuel à {{resource}} résultant d'un accès manuel aux ressources internes. S'il est supprimé ici, cet utilisateur perdra l'accès aux ressources internes.", + "You are about to remove your own access to this {{resourceType}}": "Vous êtes sur le point de supprimer votre propre accès à {{resourceType}}" + }, + "SearchModel": { + "Search all tables": "Rechercher toutes les tables", + "Search all pages": "Rechercher toutes les pages" + }, + "searchDropdown": { + "Search": "Chercher" + }, + "DescriptionTextArea": { + "DESCRIPTION": "DESCRIPTION" + }, + "FloatingEditor": { + "Collapse Editor": "Cacher l'éditeur" + }, + "FloatingPopup": { + "Maximize": "Maximiser", + "Minimize": "Minimiser" + }, + "WelcomeSitePicker": { + "Welcome back": "Bon retour parmi nous", + "You can always switch sites using the account menu.": "Vous pouvez toujours changer d'espace en utilisant le menu du compte.", + "You have access to the following Grist sites.": "Vous avez accès aux espaces Grist suivants." } } From e46e3961c5449436de4d0beaea5ba1a5b327c7f2 Mon Sep 17 00:00:00 2001 From: Paul Janzen Date: Mon, 7 Aug 2023 00:00:09 +0000 Subject: [PATCH 3/8] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (936 of 936 strings) Translation: Grist/client Translate-URL: https://hosted.weblate.org/projects/grist/client/pt_BR/ --- static/locales/pt_BR.client.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/static/locales/pt_BR.client.json b/static/locales/pt_BR.client.json index 4cd8b231..d6ba906f 100644 --- a/static/locales/pt_BR.client.json +++ b/static/locales/pt_BR.client.json @@ -479,7 +479,11 @@ "Importer": { "Merge rows that match these fields:": "Mesclar linhas que correspondem a estes campos:", "Select fields to match on": "Selecione os campos a serem correspondidos em", - "Update existing records": "Atualizar os registros existentes" + "Update existing records": "Atualizar os registros existentes", + "{{count}} unmatched field_other": "{{count}} campos sem equivalente", + "{{count}} unmatched field in import_other": "{{count}} campos sem equivalente na importação", + "{{count}} unmatched field in import_one": "{{count}} campo sem equivalente na importação", + "{{count}} unmatched field_one": "{{count}} campo sem equivalente" }, "LeftPanelCommon": { "Help Center": "Centro de Ajuda" From b0cf1f49dd6b73a9af34aff5f58fe8456f1c922f Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Mon, 7 Aug 2023 12:29:17 +0000 Subject: [PATCH 4/8] Translated using Weblate (Spanish) Currently translated at 100.0% (936 of 936 strings) Translation: Grist/client Translate-URL: https://hosted.weblate.org/projects/grist/client/es/ --- static/locales/es.client.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/static/locales/es.client.json b/static/locales/es.client.json index 23fe6885..466ba0ff 100644 --- a/static/locales/es.client.json +++ b/static/locales/es.client.json @@ -782,7 +782,11 @@ "Importer": { "Merge rows that match these fields:": "Combinar filas que coincidan con estos campos:", "Select fields to match on": "Seleccionar campos para que coincidan", - "Update existing records": "Actualizar los registros existentes" + "Update existing records": "Actualizar los registros existentes", + "{{count}} unmatched field in import_one": "{{count}} campo no coincide con la importación", + "{{count}} unmatched field_one": "{{count}} campo sin equivalente", + "{{count}} unmatched field_other": "{{count}} campos sin equivalentes", + "{{count}} unmatched field in import_other": "{{count}} campos sin equivalente en la importación" }, "PermissionsWidget": { "Allow All": "Permitir todo", From 88b447a1a333afb4af850fb40ee39646c9c5d06b Mon Sep 17 00:00:00 2001 From: Paul Janzen Date: Mon, 7 Aug 2023 00:07:22 +0000 Subject: [PATCH 5/8] Translated using Weblate (German) Currently translated at 100.0% (936 of 936 strings) Translation: Grist/client Translate-URL: https://hosted.weblate.org/projects/grist/client/de/ --- static/locales/de.client.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/static/locales/de.client.json b/static/locales/de.client.json index 631117ae..89dc570b 100644 --- a/static/locales/de.client.json +++ b/static/locales/de.client.json @@ -479,7 +479,11 @@ "Importer": { "Merge rows that match these fields:": "Zeilen zusammenführen, die mit diesen Feldern übereinstimmen:", "Select fields to match on": "Wählen Sie Felder zum Abgleichen aus", - "Update existing records": "Vorhandene Datensätze aktualisieren" + "Update existing records": "Vorhandene Datensätze aktualisieren", + "{{count}} unmatched field in import_other": "{{count}} unangepasste Felder im Import", + "{{count}} unmatched field_one": "{{count}} unangepasstes Feld", + "{{count}} unmatched field_other": "{{count}} unangepasste Felder", + "{{count}} unmatched field in import_one": "{{count}} unangepasst Feld im Import" }, "LeftPanelCommon": { "Help Center": "Hilfe-Center" From 52c20228e3fd2887fa98dbe66d896ddf1cbf3cc6 Mon Sep 17 00:00:00 2001 From: demonisius Date: Mon, 7 Aug 2023 08:59:26 +0000 Subject: [PATCH 6/8] Translated using Weblate (Russian) Currently translated at 99.6% (933 of 936 strings) Translation: Grist/client Translate-URL: https://hosted.weblate.org/projects/grist/client/ru/ --- static/locales/ru.client.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/static/locales/ru.client.json b/static/locales/ru.client.json index f1adb763..3434ed45 100644 --- a/static/locales/ru.client.json +++ b/static/locales/ru.client.json @@ -95,7 +95,8 @@ "Personal Site": "Личный сайт", "Home Page": "Домашняя страница", "Legacy": "Устаревший", - "Team Site": "Сайт группы" + "Team Site": "Сайт группы", + "Grist Templates": "Шаблоны Grist" }, "ApiKey": { "Remove API Key": "Удалить ключ API", @@ -180,7 +181,10 @@ "Support Grist": "Поддержка Grist", "Upgrade Plan": "Обновить Подписку", "Activation": "Активация", - "Billing Account": "Расчетный счет" + "Billing Account": "Расчетный счет", + "Sign In": "Войти", + "Sign Up": "Подписаться", + "Use This Template": "Использовать этот шаблон" }, "ActionLog": { "Table {{tableId}} was subsequently removed in action #{{actionNum}}": "Таблица {{tableId}} впоследствии была удалена в действии #{{actionNum}}", From 01a9b5fa05f53998f0c2c45620c3e505d35375e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D0=BC=D0=B8=D1=80=20=D0=92?= Date: Tue, 8 Aug 2023 06:52:01 +0000 Subject: [PATCH 7/8] Translated using Weblate (Russian) Currently translated at 99.6% (933 of 936 strings) Translation: Grist/client Translate-URL: https://hosted.weblate.org/projects/grist/client/ru/ --- static/locales/ru.client.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/static/locales/ru.client.json b/static/locales/ru.client.json index 3434ed45..c6de2f37 100644 --- a/static/locales/ru.client.json +++ b/static/locales/ru.client.json @@ -539,12 +539,17 @@ "GristDoc": { "Import from file": "Импорт из файла", "Added new linked section to view {{viewName}}": "Добавлен новый связанный раздел в представление {{viewName}}", - "Saved linked section {{title}} in view {{name}}": "Сохраненный связанный раздел {{title}} в представлении {{name}}" + "Saved linked section {{title}} in view {{name}}": "Сохраненный связанный раздел {{title}} в представлении {{name}}", + "go to webhook settings": "перейти к настройкам webhook" }, "Importer": { "Merge rows that match these fields:": "Объедините строки, соответствующие этим полям:", "Select fields to match on": "Выберите поля для сопоставления", - "Update existing records": "Обновите существующие записи" + "Update existing records": "Обновите существующие записи", + "{{count}} unmatched field in import_other": "{{count}} несовпадающие поля при импорте", + "{{count}} unmatched field in import_one": "{{count}} несовпадающее поле при импорте", + "{{count}} unmatched field_one": "{{count}} несовпадающее поле", + "{{count}} unmatched field_other": "{{count}} несовпадающие поля" }, "LeftPanelCommon": { "Help Center": "Справочный центр" From ccf00fc05b2e712feca3696d0780e1ce7b053102 Mon Sep 17 00:00:00 2001 From: jasongwq Date: Mon, 7 Aug 2023 01:28:04 +0000 Subject: [PATCH 8/8] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (936 of 936 strings) Translation: Grist/client Translate-URL: https://hosted.weblate.org/projects/grist/client/zh_Hans/ --- static/locales/zh_Hans.client.json | 237 ++++++++++++++++++++++++++--- 1 file changed, 217 insertions(+), 20 deletions(-) diff --git a/static/locales/zh_Hans.client.json b/static/locales/zh_Hans.client.json index cd48ab41..62f2475b 100644 --- a/static/locales/zh_Hans.client.json +++ b/static/locales/zh_Hans.client.json @@ -34,7 +34,9 @@ "Lookup Column": "查找列", "Permissions": "权限", "Remove column {{- colId }} from {{- tableId }} rules": "从 {{- tableId }} 规则中删除列 {{- colId }}", - "When adding table rules, automatically add a rule to grant OWNER full access.": "添加表规则时,自动添加规则以授予 OWNER 完全访问权限。" + "When adding table rules, automatically add a rule to grant OWNER full access.": "添加表规则时,自动添加规则以授予 OWNER 完全访问权限。", + "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.": "允许编辑者编辑结构(例如修改和删除表、列、布局)和编写公式,无论读取限制如何,都可以访问所有数据。", + "This default should be changed if editors' access is to be limited. ": "如果要限制编辑者的访问权限,则应更改此默认值。 " }, "AccountPage": { "API": "API", @@ -135,7 +137,11 @@ "Clear values": "清除值", "Copy anchor link": "复制锚点链接", "Delete {{count}} columns_one": "删除列", - "Delete {{count}} rows_other": "删除 {{count}} 行" + "Delete {{count}} rows_other": "删除 {{count}} 行", + "Paste": "黏贴", + "Comment": "评论", + "Copy": "拷贝", + "Cut": "剪切" }, "ACUserManager": { "Enter email address": "请输入电邮地址", @@ -169,7 +175,14 @@ "Sign Out": "登出", "Sign in": "登录", "Switch Accounts": "切换帐户", - "Toggle Mobile Mode": "切换移动模式" + "Toggle Mobile Mode": "切换移动模式", + "Activation": "激活", + "Billing Account": "计费账户", + "Support Grist": "支持 Grist", + "Upgrade Plan": "升级计划", + "Sign In": "登录", + "Sign Up": "注册", + "Use This Template": "使用这个模板" }, "ViewAsDropdown": { "View As": "查看为", @@ -189,7 +202,8 @@ "Home Page": "主页", "Legacy": "遗产", "Personal Site": "个人网站", - "Team Site": "团队网站" + "Team Site": "团队网站", + "Grist Templates": "Grist 模板" }, "AppModel": { "This team site is suspended. Documents can be read, but not modified.": "此团队网站已挂起。可以读取文档,但不能修改文档。" @@ -292,7 +306,7 @@ "HomeIntro": { "Interested in using Grist outside of your team? Visit your free ": "有兴趣在您的团队之外使用 Grist 吗? 访问您的免费 ", "Invite Team Members": "邀请团队成员", - "Sign up": "报名", + "Sign up": "注册", "personal site": "个人网站", "Any documents created in this site will appear here.": "在此站点中创建的任何文档都将显示在此处。", "Browse Templates": "浏览模板", @@ -309,7 +323,9 @@ "Welcome to Grist, {{name}}!": "欢迎来到 Grist,{{name}}!", "Welcome to {{orgName}}": "欢迎来到{{orgName}}", "You have read-only access to this site. Currently there are no documents.": "您对该站点具有只读访问权限。 目前没有文件。", - "{{signUp}} to save your work. ": "{{signUp}} 保存您的工作。 " + "{{signUp}} to save your work. ": "{{signUp}} 保存您的工作。 ", + "Welcome to {{- orgName}}": "欢迎来到 {{- orgName}}", + "Welcome to Grist, {{- name}}!": "欢迎来到 Grist,{{- name}}!" }, "HomeLeftPane": { "Delete": "删除", @@ -319,12 +335,13 @@ "Create Empty Document": "创建空文档", "Create Workspace": "创建工作区", "Delete {{workspace}} and all included documents?": "删除 {{workspace}} 和所有包含的文档?", - "Examples & Templates": "示例和模板", + "Examples & Templates": "模板", "Import Document": "导入文档", "Manage Users": "管理用户", "Rename": "改名", "Workspace will be moved to Trash.": "工作区将移至回收站。", - "Workspaces": "工作区" + "Workspaces": "工作区", + "Tutorial": "教程" }, "MakeCopyMenu": { "Cancel": "取消", @@ -332,7 +349,7 @@ "Name": "姓名", "No destination workspace": "没有目标工作区", "Organization": "组织", - "Sign up": "报名", + "Sign up": "注册", "Update": "更新", "As Template": "作为模板", "Be careful, the original has changes not in this document. Those changes will be overwritten.": "请注意,原始文档中没有更改。 这些更改将被覆盖。", @@ -360,7 +377,8 @@ "Cannot find personal site, sorry!": "找不到个人网站,抱歉!", "Give feedback": "给予反馈", "Report a problem": "报告一个问题", - "Upgrade Plan": "升级计划" + "Upgrade Plan": "升级计划", + "Manage billing": "管理计费" }, "OpenVideoTour": { "Grist Video Tour": "格里斯特视频之旅", @@ -399,7 +417,8 @@ "Theme": "主题", "WIDGET TITLE": "小部件标题", "Widget": "小部件", - "You do not have edit access to this document": "您没有对此文档的编辑权限" + "You do not have edit access to this document": "您没有对此文档的编辑权限", + "Add referenced columns": "添加引用列" }, "RowContextMenu": { "Insert row below": "在下方插入行", @@ -449,7 +468,7 @@ "Edit Card Layout": "编辑卡片布局", "Show raw data": "显示原始数据", "Widget options": "小部件选项", - "Add to page": "添加到页面", + "Add to page": "添加至页面", "Collapse widget": "折叠小部件" }, "ViewSectionMenu": { @@ -540,7 +559,11 @@ "Error in the cell": "单元格错误", "Errors in all {{numErrors}} cells": "所有 {{numErrors}} 单元格中的错误", "Errors in {{numErrors}} of {{numCells}} cells": "{{numCells}} 个单元格中的 {{numErrors}} 个错误", - "editingFormula is required": "需要编辑公式" + "editingFormula is required": "需要编辑公式", + "Enter formula or {{button}}.": "输入公式或 {{button}} 。", + "Enter formula.": "输入公式。", + "Expand Editor": "展开编辑器", + "use AI Assistant": "使用AI助手" }, "DocTour": { "Cannot construct a document tour from the data in this document. Ensure there is a table named GristDocTour with columns Title, Body, Placement, and Location.": "无法从该文档中的数据构建文档浏览。 确保有一个名为 GristDocTour 的表,其中包含 Title、Body、Placement 和 Location 列。", @@ -558,7 +581,9 @@ "Time Zone:": "时区:", "API": "应用程序接口", "Document ID copied to clipboard": "文档 ID 已复制到剪贴板", - "Ok": "好的" + "Ok": "好的", + "Manage Webhooks": "管理 Webhooks", + "Webhooks": "Webhooks" }, "DocumentUsage": { "Attachments Size": "附件大小", @@ -671,12 +696,17 @@ "GristDoc": { "Added new linked section to view {{viewName}}": "添加了新的链接部分以查看 {{viewName}}", "Import from file": "从文件导入", - "Saved linked section {{title}} in view {{name}}": "已将链接部分 {{title}} 保存在视图 {{name}} 中" + "Saved linked section {{title}} in view {{name}}": "已将链接部分 {{title}} 保存在视图 {{name}} 中", + "go to webhook settings": "去设置 webhook" }, "Importer": { "Merge rows that match these fields:": "合并与这些字段匹配的行:", "Select fields to match on": "选择要匹配的字段", - "Update existing records": "更新现有记录" + "Update existing records": "更新现有记录", + "{{count}} unmatched field_one": "{{count}} 个不匹配字段", + "{{count}} unmatched field in import_one": "导入中 {{count}} 个字段不匹配", + "{{count}} unmatched field_other": "{{count}} 个不匹配字段", + "{{count}} unmatched field in import_other": "导入中 {{count}} 个字段不匹配" }, "LeftPanelCommon": { "Help Center": "帮助中心" @@ -739,7 +769,8 @@ "Send to Google Drive": "发送到谷歌云端硬盘", "Show in folder": "展现在文件夹中", "Unsaved": "未保存", - "Work on a Copy": "在副本上工作" + "Work on a Copy": "在副本上工作", + "Share": "分享" }, "SiteSwitcher": { "Create new team site": "创建新的团队网站", @@ -800,7 +831,8 @@ "Override widget title": "覆盖小部件标题", "Provide a table name": "提供表名", "Save": "保存", - "WIDGET TITLE": "小部件标题" + "WIDGET TITLE": "小部件标题", + "WIDGET DESCRIPTION": "小部件描述" }, "duplicatePage": { "Duplicate page {{pageName}}": "重复页面 {{pageName}}", @@ -857,7 +889,8 @@ "Find Next ": "找下一个 ", "Find Previous ": "查找上一个 ", "No results": "没有结果", - "Search in document": "在文档中搜索" + "Search in document": "在文档中搜索", + "Search": "搜索" }, "sendToDrive": { "Sending file to Google Drive": "发送文件到谷歌云端硬盘" @@ -961,7 +994,11 @@ "Reference columns are the key to {{relational}} data in Grist.": "引用列是 Grist 中 {{relational}} 数据的关键。", "Clicking {{EyeHideIcon}} in each cell hides the field from this view without deleting it.": "单击每个单元格中的 {{EyeHideIcon}} 可隐藏此视图中的字段而不将其删除。", "Editing Card Layout": "编辑卡片布局", - "Formulas that trigger in certain cases, and store the calculated value as data.": "在某些情况下触发的公式,并将计算值存储为数据。" + "Formulas that trigger in certain cases, and store the calculated value as data.": "在某些情况下触发的公式,并将计算值存储为数据。", + "Anchor Links": "锚链接", + "To make an anchor link that takes the user to a specific cell, click on a row and press {{shortcut}}.": "要创建将用户带到特定单元格的锚点链接,请单击行并按 {{shortcut}} 。", + "You can choose one of our pre-made widgets or embed your own by providing its full URL.": "您可以选择我们的一个预制小部件或通过提供其完整的URL嵌入您自己的。", + "Custom Widgets": "自定义小部件" }, "DescriptionConfig": { "DESCRIPTION": "描述" @@ -969,5 +1006,165 @@ "PagePanels": { "Close Creator Panel": "关闭创作者面板", "Open Creator Panel": "打开创作者面板" + }, + "ColumnTitle": { + "Column label": "列标签", + "Provide a column label": "提供列标签", + "Close": "关闭", + "COLUMN ID: ": "列号: ", + "Column description": "列说明", + "Add description": "添加说明", + "Cancel": "取消", + "Column ID copied to clipboard": "列ID已复制到剪贴板", + "Save": "保存" + }, + "FieldContextMenu": { + "Copy": "拷贝", + "Copy anchor link": "复制锚点链接", + "Cut": "剪切", + "Hide field": "隐藏字段", + "Paste": "粘贴", + "Clear field": "清除字段" + }, + "FormulaAssistant": { + "Capabilities": "技术支持", + "Formula Cheat Sheet": "公式备忘单", + "Regenerate": "重新生成", + "Tips": "建 议", + "Apply": "应用", + "Clear Conversation": "清晰的对话", + "Hi, I'm the Grist Formula AI Assistant.": "你好,我是 Grist 公式的人工智能助手。", + "Learn more": "了解更多", + "Press Enter to apply suggested formula.": "按 Enter 键应用建议的公式。", + "Code View": "代码视图", + "I can only help with formulas. I cannot build tables, columns, and views, or write access rules.": "我只能帮忙写公式。我无法构建表、列和视图,也无法编写访问规则。", + "Ask the bot.": "咨询机器人。", + "Grist's AI Formula Assistance. ": "Grist 的人工智能公式协助。 ", + "Preview": "预览", + "See our {{helpFunction}} and {{formulaCheat}}, or visit our {{community}} for more help.": "请参阅我们的 {{helpFunction}} 和 {{formulaCheat}},或访问我们的 {{community}} 获取更多帮助。", + "AI Assistant": "AI助手", + "There are some things you should know when working with me:": "与我合作时,您应该了解一些事情:", + "What do you need help with?": "你有什么需要帮助的?", + "Cancel": "取消", + "Need help? Our AI assistant can help.": "需要帮忙?我们的人工智能助手可以提供帮助。", + "New Chat": "新聊天", + "Save": "保存", + "Community": "社区", + "Data": "数据", + "Formula Help. ": "公式帮助。 ", + "Function List": "函数列表", + "Grist's AI Assistance": "Grist 人工智能助手", + "Sign up for a free Grist account to start using the Formula AI Assistant.": "注册一个免费的Grist帐户,开始使用Formula AI助手。", + "Sign Up for Free": "免费注册" + }, + "WebhookPage": { + "Clear Queue": "清除队列", + "Webhook Settings": "Webhook设置" + }, + "WelcomeSitePicker": { + "Welcome back": "欢迎回来", + "You can always switch sites using the account menu.": "您始终可以使用帐户菜单切换站点。", + "You have access to the following Grist sites.": "您可以访问以下 Grist 网站。" + }, + "UserManager": { + "Invite multiple": "邀请多人", + "Invite people to {{resourceType}}": "邀请人们加入 {{resourceType}}", + "Public access inherited from {{parent}}. To remove, set 'Inherit access' option to 'None'.": "公共访问权限继承自 {{parent}}。要删除,请将“继承访问权限”选项设置为“无”。", + "User inherits permissions from {{parent})}. To remove, set 'Inherit access' option to 'None'.": "用户从 {{parent})} 继承权限。要删除,请将“继承访问权限”选项设置为“无”。", + "member": "成员", + "No default access allows access to be granted to individual documents or workspaces, rather than the full team site.": "只允许对单个文档或工作区配置无默认访问权限,而不能对整个团队网站配置。", + "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}}.": "一旦您删除了自己的访问权限,如果没有对{{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.": "由于手动设置了对内部资源的访问权限,因此用户具有对{{resource}}的查看权限。如果在此处删除,此用户将无法访问内部资源。", + "Close": "关闭", + "Collaborator": "合作者", + "Create a team to share with more people": "创建团队与更多人分享", + "On": "打开", + "Off": "关闭", + "Open Access Rules": "开放访问规则", + "Outside collaborator": "外部合作者", + "Your role for this team site": "您在这个团队站点中的角色", + "Your role for this {{resourceType}}": "您在此{{resourceType}}中的角色", + "free collaborator": "自由合作者", + "guest": "游客", + "Allow anyone with the link to open.": "允许任何知道该链接的人打开。", + "Anyone with link ": "任何有链接的人 ", + "Cancel": "取消", + "Confirm": "确认", + "Copy Link": "复制链接", + "Link copied to clipboard": "链接已复制到剪贴板", + "Manage members of team site": "管理团队网站的成员", + "No default access allows access to be granted to individual documents or workspaces, rather than the full team site.": "没有默认访问权限允许授予对单个文档或工作区的访问权限,而不是对整个团队网站的访问权限。", + "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}}.": "一旦您删除了自己的访问权限,如果没有对 {{name}} 有足够访问权限的其他人的帮助,您将无法取回该访问权限。", + "User may not modify their own access.": "用户不得修改自己的访问权限。", + "You are about to remove your own access to this {{resourceType}}": "您即将删除自己对此{{resourceType}}的访问权限", + "User inherits permissions from {{parent}}. To remove, set 'Inherit access' option to 'None'.": "用户从 {{parent}} 继承权限。要删除,请将“继承访问权限”选项设置为“无”。", + "Add {{member}} to your team": "将 {{member}} 添加到您的团队", + "Grist support": "Grist 支持", + "Guest": "游客", + "Public Access": "公开访问", + "Public access": "公开访问", + "Public access: ": "公开访问: ", + "Remove my access": "删除我的访问权限", + "Save & ": "保存 & ", + "Team member": "团队成员", + "team site": "团队网站", + "{{collaborator}} limit exceeded": "已超出{{collaborator}}限制", + "{{limitAt}} of {{limitTop}} {{collaborator}}s": "{{limitAt}} of {{limitTop}} {{collaborator}}s" + }, + "SupportGristPage": { + "This instance is opted out of telemetry. Only the site administrator has permission to change this.": "该实例被选择退出遥测。只有网站管理员有权更改此设置。", + "This instance is opted in to telemetry. Only the site administrator has permission to change this.": "该实例被选择用于遥测。只有网站管理员有权更改此设置。", + "GitHub": "GitHub", + "GitHub Sponsors page": "GitHub赞助商页面", + "Help Center": "帮助中心", + "Opt in to Telemetry": "选择遥测", + "Opt out of Telemetry": "选择退出遥测", + "Support Grist": "支持 Grist", + "Telemetry": "遥测", + "Sponsor Grist Labs on GitHub": "在 GitHub 上赞助 Grist Labs", + "Home": "主页", + "Manage Sponsorship": "管理赞助", + "We only collect usage statistics, as detailed in our {{link}}, never document contents.": "我们只收集使用统计数据,如我们的{{link}}中所述,从不搜集文档内容。", + "You can opt out of telemetry at any time from this page.": "您可以随时从此页面选择退出遥测。", + "You have opted in to telemetry. Thank you!": "您已选择使用遥测。谢谢你,谢谢!", + "You have opted out of telemetry.": "您已选择退出遥测。" + }, + "SupportGristNudge": { + "Help Center": "帮助中心", + "Support Grist page": "支持Grist页面", + "Close": "关闭", + "Contribute": "投稿", + "Support Grist": "支持 Grist", + "Opt in to Telemetry": "选择遥测", + "Opted In": "选择加入" + }, + "DescriptionTextArea": { + "DESCRIPTION": "描述" + }, + "buildViewSectionDom": { + "No data": "没有数据", + "No row selected in {{title}}": "{{title}}中未选择行", + "Not all data is shown": "未显示所有数据" + }, + "Clipboard": { + "Got it": "明白了", + "Unavailable Command": "命令不可用" + }, + "GridView": { + "Click to insert": "点击插入" + }, + "SearchModel": { + "Search all pages": "搜索所有页面", + "Search all tables": "搜索所有表" + }, + "searchDropdown": { + "Search": "搜索" + }, + "FloatingEditor": { + "Collapse Editor": "折叠编辑器" + }, + "FloatingPopup": { + "Maximize": "最大化", + "Minimize": "最小化" } }