Skip to content

Commit

Permalink
Merge branch 'master' of github.com:sagemathinc/cocalc
Browse files Browse the repository at this point in the history
  • Loading branch information
williamstein committed Jan 17, 2025
2 parents e2f16a0 + a853665 commit 5fc0a3e
Show file tree
Hide file tree
Showing 26 changed files with 583 additions and 265 deletions.
3 changes: 2 additions & 1 deletion src/packages/frontend/account/public-paths/public-paths.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import { Alert, Button, Checkbox, Space, Spin, Table } from "antd";
import { join } from "path";
import { FormattedMessage, useIntl } from "react-intl";

import {
React,
redux,
Expand Down Expand Up @@ -298,7 +299,7 @@ function ComputeImage({ compute_image, project_id, path, setError }) {
<>
<ComputeImageSelector
disabled={saving}
selected_image={selectedImage}
current_image={selectedImage}
layout={"compact"}
onSelect={async (img) => {
setSelectedImage(img);
Expand Down
20 changes: 15 additions & 5 deletions src/packages/frontend/cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,30 @@
"mathjax",
"nbconvert",
"nbgrader",
"Ollama",
"nbviewer",
"Ollama",
"onprem",
"plotly",
"rereturn",
"respawns",
"Rmarkdown",
"Sagemath",
"sagews",
"syncdb",
"undelete",
"undeleting",
"syncstring",
"onprem"
"timetravel",
"undelete",
"undeleting"
],
"ignoreWords": [
"antd",
"ipynb",
"kernelspec",
"mistralai",
"Popconfirm",
"vertexai",
"vfill"
],
"ignoreWords": ["vfill", "ipynb", "Popconfirm"],
"flagWords": [],
"ignorePaths": ["node_modules/**", "dist/**", "dist-ts/**", "build/**"],
"allowCompoundWords": false,
Expand Down
73 changes: 46 additions & 27 deletions src/packages/frontend/custom-software/selector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@

// cSpell:ignore descr disp dflt

import { Col, Row, Alert, Button, Divider, List, Radio } from "antd";
import { Alert, Button, Col, Divider, List, Radio, Row } from "antd";
import { join } from "path";
import { FormattedMessage, useIntl } from "react-intl";

import {
CSS,
React,
Expand All @@ -29,6 +31,7 @@ import {
SiteName,
} from "@cocalc/frontend/customize";
import { appBasePath } from "@cocalc/frontend/customize/app-base-path";
import { labels } from "@cocalc/frontend/i18n";
import { ComputeImageSelector } from "@cocalc/frontend/project/settings/compute-image-selector";
import { KUCALC_COCALC_COM } from "@cocalc/util/db-schema/site-defaults";
import { unreachable } from "@cocalc/util/misc";
Expand Down Expand Up @@ -103,7 +106,7 @@ export const SoftwareEnvironment: React.FC<Props> = (props: Props) => {
"compute_images",
"images",
);

const intl = useIntl();
const customize_kucalc = useTypedRedux("customize", "kucalc");
const onCoCalcCom = customize_kucalc === KUCALC_COCALC_COM;
const customize_software = useTypedRedux("customize", "software");
Expand Down Expand Up @@ -244,21 +247,26 @@ export const SoftwareEnvironment: React.FC<Props> = (props: Props) => {
<Alert
type="info"
banner
message={
<>
The selected <em>custom</em> software environment stays with the
project. Create a new project to work in a different software
environment. You can always{" "}
<A
href={
"https://doc.cocalc.com/project-files.html#file-actions-on-one-file"
}
>
copy files between projects
</A>{" "}
as well.
</>
}
message={intl.formatMessage(
{
id: "custom-software.selector.message",
defaultMessage: `The selected <em>custom</em> software environment stays with the project.
Create a new project to work in a different software environment.
You can always <A>copy files between projects</A> as well.
`,
},
{
A: (c) => (
<A
href={
"https://doc.cocalc.com/project-files.html#file-actions-on-one-file"
}
>
{c}
</A>
),
},
)}
/>
</>
);
Expand Down Expand Up @@ -326,15 +334,18 @@ export const SoftwareEnvironment: React.FC<Props> = (props: Props) => {
return (
<>
<Paragraph>
Select the software environment. Either go with the default
environment, or select one of the more specialized ones. Whatever you
pick, you can change it later in Project Settings → Control → Software
Environment at any time.
<FormattedMessage
id="custom-software.selector.explanation"
defaultMessage={`Select the software environment.
Either go with the default environment, or select one of the more specialized ones.
Whatever choice you make, you can change it later in
Project Settings → Control → Software Environment at any time.`}
/>
</Paragraph>
<Paragraph>
<ComputeImageSelector
size={"middle"}
selected_image={selected}
current_image={selected}
layout={"horizontal"}
onSelect={(img) => {
const display = software_images.get(img)?.get("title");
Expand All @@ -347,17 +358,23 @@ export const SoftwareEnvironment: React.FC<Props> = (props: Props) => {
<Alert
type="info"
banner
closable
message={
<>
You've selected a non-standard image:{" "}
{intl.formatMessage({
id: "custom-software.selector.non-standard",
defaultMessage:
"You selected a non-standard software environment",
})}
:{" "}
<Button
size="small"
type="link"
onClick={() => {
set_state(dflt_software_img, undefined, "standard");
}}
>
Reset
{intl.formatMessage(labels.reset)}
</Button>
</>
}
Expand Down Expand Up @@ -499,7 +516,7 @@ export const SoftwareEnvironment: React.FC<Props> = (props: Props) => {
return (
<Col sm={24}>
<ComputeImageSelector
selected_image={image_selected ?? dflt_software_img}
current_image={image_selected ?? dflt_software_img}
layout={"horizontal"}
onSelect={(img) => {
const display = software_images.get(img)?.get("title");
Expand All @@ -515,7 +532,9 @@ export const SoftwareEnvironment: React.FC<Props> = (props: Props) => {
function render_type_selection() {
return (
<>
{showTitle ? <div>Software environment</div> : undefined}
{showTitle ? (
<div>{intl.formatMessage(labels.software_environment)}</div>
) : undefined}

{onCoCalcCom ? (
<div>
Expand All @@ -534,7 +553,7 @@ export const SoftwareEnvironment: React.FC<Props> = (props: Props) => {
if (image_type === "default") return;
return (
<Divider orientation="left" plain>
Configuration
{intl.formatMessage(labels.configuration)}
</Divider>
);
}
Expand Down
17 changes: 13 additions & 4 deletions src/packages/frontend/i18n/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import { defineMessages } from "react-intl";

// cSpell:ignore noconf
// cSpell:ignore noconf collabs nostop

export const labels = defineMessages({
unique_id_is_missing: {
Expand Down Expand Up @@ -36,7 +36,7 @@ export const labels = defineMessages({
on: {
id: "labels.on",
defaultMessage: "on",
description: "single word, somthing 'on' something else",
description: "single word, something 'on' something else",
},
project: {
id: "labels.project",
Expand Down Expand Up @@ -144,7 +144,10 @@ export const labels = defineMessages({
},
preferences: { id: "labels.preferences", defaultMessage: "Preferences" },
purchases: { id: "labels.purchases", defaultMessage: "Purchases" },
subscriptions: { id: "labels.subscriptons", defaultMessage: "Subscriptions" },
subscriptions: {
id: "labels.subscriptions",
defaultMessage: "Subscriptions",
},
statements: {
id: "labels.statements",
defaultMessage: "Statements",
Expand Down Expand Up @@ -625,7 +628,7 @@ export const labels = defineMessages({
description: "Short label for showing 'more information' about something",
},
message_plural: {
id: "labels.messsage.plural",
id: "labels.message.plural",
defaultMessage: "{num, plural, one {message} other {messages}}",
},
reconnect: {
Expand Down Expand Up @@ -672,6 +675,12 @@ export const labels = defineMessages({
id: "labels.nbgrader",
defaultMessage: "NBgrader",
},
name: { id: "labels.name", defaultMessage: "Name" },
description: { id: "labels.description", defaultMessage: "Description" },
no_description: {
id: "labels.no_description",
defaultMessage: "no description",
},
software: {
id: "labels.software",
defaultMessage: "Software",
Expand Down
14 changes: 12 additions & 2 deletions src/packages/frontend/i18n/trans/ar_EG.json
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,9 @@
"course.util.status-cocalc-com.project_not_available": "(غير متاح)",
"custom-software.reset-bar.info": "<p>النقر على \"إعادة تعيين\" ينسخ جميع الملفات المصاحبة لبيئة البرمجيات المخصصة هذه إلى دليل المنزل الخاص بك. تم تنفيذ ذلك مرة واحدة عند إنشاء هذا المشروع ويمكنك تكرار هذا الإجراء الآن. إذا تم تحديث هذه الملفات المصاحبة المستضافة على {NAME} في هذه الأثناء، ستتلقى الإصدارات الأحدث.</p> <p>لاحظ أن هذا سيؤدي إلى الكتابة فوق أي تغييرات قمت بها على هذه الملفات المصاحبة، ولكنه لن يعدل أو يحذف أي ملفات أخرى. ومع ذلك، لن يُفقد شيء: لا يزال بإمكانك الوصول إلى الإصدار السابق عبر <A1>النسخ الاحتياطية السريعة</A1> أو <A2>السفر عبر الزمن</A2>.</p> <p>سيؤدي هذا الإجراء أيضًا إلى إعادة تشغيل مشروعك!</p>",
"custom-software.reset-bar.reset-and-restart": "إعادة التعيين وإعادة التشغيل",
"custom-software.selector.explanation": "اختر بيئة البرمجيات. يمكنك إما اختيار البيئة الافتراضية، أو اختيار واحدة من البيئات الأكثر تخصصًا. مهما كان اختيارك، يمكنك تغييره لاحقًا في إعدادات المشروع → التحكم → بيئة البرمجيات في أي وقت.",
"custom-software.selector.message": "يبقى <em>البيئة البرمجية المخصصة</em> المختارة مع المشروع. قم بإنشاء مشروع جديد للعمل في بيئة برمجية مختلفة. يمكنك دائمًا <A>نسخ الملفات بين المشاريع</A> أيضًا.",
"custom-software.selector.non-standard": "لقد اخترت بيئة برمجيات غير قياسية",
"customize.footer.name": "{name} بواسطة {organizationName}",
"customize.footer.system-status": "حالة النظام",
"editor.build_control_and_log.title": "البناء والتحكم والسجل",
Expand Down Expand Up @@ -902,6 +905,7 @@
"labels.delete": "حذف",
"labels.delete_forever": "احذف نهائياً",
"labels.deleted": "محذوف",
"labels.description": "الوصف",
"labels.disconnected": "غير متصل",
"labels.documentation": "التوثيق",
"labels.download": "تنزيل",
Expand Down Expand Up @@ -939,6 +943,7 @@
"labels.loading": "جار التحميل...",
"labels.log": "تسجيل",
"labels.masked_files": "{masked, select, true {إخفاء الملفات المخفية} other {إظهار الملفات المخفية}}. الملفات المخفية هي ملفات تم إنشاؤها تلقائيًا أو ملفات مؤقتة، ولا يُقصد تحريرها. ستكون باللون الرمادي.",
"labels.message.plural": "{num, plural, one {رسالة} other {رسائل}}",
"labels.messages": "رسائل",
"labels.messages.all_messages": "جميع الرسائل",
"labels.messages.archive": "أرشيف",
Expand All @@ -951,14 +956,15 @@
"labels.messages.to": "إلى",
"labels.messages.to_inbox": "إلى الوارد",
"labels.messages.unread": "غير مقروء",
"labels.messsage.plural": "{num, plural, one {رسالة} other {رسائل}}",
"labels.more_info": "مزيد من المعلومات",
"labels.moved": "نُقل",
"labels.n_of_m": "{n} من {m}",
"labels.name": "الاسم",
"labels.nbgrader": "NBgrader",
"labels.new_dots": "جديد...",
"labels.new.file": "جديد",
"labels.new.file.tooltip": "إنشاء ملف جديد",
"labels.no_description": "لا يوجد وصف",
"labels.not_implemented": "لم يتم التنفيذ",
"labels.notifications": "الإشعارات",
"labels.on": "على",
Expand Down Expand Up @@ -1015,7 +1021,7 @@
"labels.statements": "البيانات",
"labels.status": "الحالة",
"labels.stop": "توقف",
"labels.subscriptons": "الاشتراكات",
"labels.subscriptions": "الاشتراكات",
"labels.support": "الدعم",
"labels.tabs": "علامات التبويب",
"labels.terminal": "طرفية",
Expand Down Expand Up @@ -1247,6 +1253,10 @@
"project.settings.about-box.image.label": "صورة (اختياري)",
"project.settings.about-box.name.label": "الاسم (اختياري)",
"project.settings.about-box.title.label": "العنوان",
"project.settings.compute-image-selector.button.save-restart": "حفظ وإعادة التشغيل",
"project.settings.compute-image-selector.doubt": "{default, select, true {هذا هو الاختيار الافتراضي} other {ملاحظة: في حالة الشك، اختر \"{default_title}\"}}",
"project.settings.compute-image-selector.software-env-info": "يوفر بيئة البرامج المختارة كل البرامج التي يمكن لهذا المشروع استخدامها. إذا كنت بحاجة إلى برامج إضافية، يمكنك إما تثبيتها في المشروع أو الاتصال بالدعم. تعرف على <A1>تثبيت حزم Python</A1>، <A2>نواة Python Jupyter</A2>، <A3>حزم R</A3> و <A4>حزم Julia</A4>.",
"project.settings.compute-image-selector.software-env-info.cocalc_com": "تعرف على المزيد حول البيئات المحددة في <A1>مخزون البرامج</A1>. تتوفر لقطات مما كان متاحًا في نقطة زمنية محددة لكل خط من البيئات. يتم تحديث البيئة الافتراضية الحالية فقط بانتظام.",
"project.settings.control.cpu_usage.info": "استخدمت <b>{cpu_str}</b> من وقت وحدة المعالجة المركزية منذ بدء المشروع",
"project.settings.control.cpu_usage.label": "استخدام وحدة المعالجة المركزية",
"project.settings.control.idle_timeout.always_running.info": "سيتم <b>تشغيل المشروع تلقائيًا</b> إذا توقف لأي سبب (سيقوم بتشغيل أي <A>برامج تهيئة</A>).",
Expand Down
14 changes: 12 additions & 2 deletions src/packages/frontend/i18n/trans/de_DE.json
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,9 @@
"course.util.status-cocalc-com.project_not_available": "(nicht verfügbar)",
"custom-software.reset-bar.info": "<p> Durch Klicken auf \"Zurücksetzen\" werden alle begleitenden Dateien dieser benutzerdefinierten Softwareumgebung in Ihr Home-Verzeichnis kopiert. Dies wurde einmal beim Erstellen dieses Projekts durchgeführt und Sie können diese Aktion jetzt wiederholen. Falls diese begleitenden Dateien, die auf {NAME} gehostet sind, zwischenzeitlich aktualisiert wurden, erhalten Sie die neueren Versionen. </p> <p> Beachten Sie, dass dadurch alle Änderungen, die Sie an diesen begleitenden Dateien vorgenommen haben, überschrieben werden, aber keine anderen Dateien geändert oder gelöscht werden. Allerdings geht nichts verloren: Sie können auf die vorherige Version weiterhin über <A1>Snapshot Backups</A1> oder <A2>TimeTravel</A2> zugreifen. </p> <p>Diese Aktion wird auch Ihr Projekt neu starten!</p>",
"custom-software.reset-bar.reset-and-restart": "Zurücksetzen und Neustarten",
"custom-software.selector.explanation": "Wählen Sie die Softwareumgebung aus. Entweder wählen Sie die Standardumgebung oder eine der spezialisierteren. Unabhängig von Ihrer Wahl können Sie diese später jederzeit in den Projekteinstellungen → Steuerung → Softwareumgebung ändern.",
"custom-software.selector.message": "Die ausgewählte <em>benutzerdefinierte</em> Softwareumgebung bleibt beim Projekt. Erstellen Sie ein neues Projekt, um in einer anderen Softwareumgebung zu arbeiten. Sie können auch jederzeit <A>Dateien zwischen Projekten kopieren</A>.",
"custom-software.selector.non-standard": "Sie haben eine nicht standardmäßige Softwareumgebung ausgewählt",
"customize.footer.name": "{name} von {organizationName}",
"customize.footer.system-status": "Systemstatus",
"editor.build_control_and_log.title": "Kompiler-Steuerung und Protokoll",
Expand Down Expand Up @@ -902,6 +905,7 @@
"labels.delete": "Löschen",
"labels.delete_forever": "Für immer löschen",
"labels.deleted": "gelöscht",
"labels.description": "Beschreibung",
"labels.disconnected": "Getrennt",
"labels.documentation": "Dokumentation",
"labels.download": "herunterladen",
Expand Down Expand Up @@ -939,6 +943,7 @@
"labels.loading": "Laden...",
"labels.log": "Protokoll",
"labels.masked_files": "{masked, select, true {Maskierte Dateien verbergen} other {Maskierte Dateien anzeigen}}. Maskierte Dateien sind automatisch generierte oder temporäre Dateien, die nicht bearbeitet werden sollen. Sie werden ausgegraut.",
"labels.message.plural": "{num, plural, one {Nachricht} other {Nachrichten}}",
"labels.messages": "Nachrichten",
"labels.messages.all_messages": "Alle Nachrichten",
"labels.messages.archive": "Archivieren",
Expand All @@ -951,14 +956,15 @@
"labels.messages.to": "An",
"labels.messages.to_inbox": "In den Posteingang",
"labels.messages.unread": "Ungelesen",
"labels.messsage.plural": "{num, plural, one {Nachricht} other {Nachrichten}}",
"labels.more_info": "Mehr Infos",
"labels.moved": "verschoben",
"labels.n_of_m": "{n} von {m}",
"labels.name": "Name",
"labels.nbgrader": "NBgrader",
"labels.new_dots": "Neu...",
"labels.new.file": "Neu",
"labels.new.file.tooltip": "Erstelle eine neue Datei",
"labels.no_description": "keine Beschreibung",
"labels.not_implemented": "nicht implementiert",
"labels.notifications": "Benachrichtigungen",
"labels.on": "auf",
Expand Down Expand Up @@ -1015,7 +1021,7 @@
"labels.statements": "Belege",
"labels.status": "Status",
"labels.stop": "Stop",
"labels.subscriptons": "Abonnements",
"labels.subscriptions": "Abonnements",
"labels.support": "Unterstützung",
"labels.tabs": "Tabs",
"labels.terminal": "Terminal",
Expand Down Expand Up @@ -1247,6 +1253,10 @@
"project.settings.about-box.image.label": "Bild (optional)",
"project.settings.about-box.name.label": "Name (optional)",
"project.settings.about-box.title.label": "Titel",
"project.settings.compute-image-selector.button.save-restart": "Speichern und Neustarten",
"project.settings.compute-image-selector.doubt": "{default, select, true {Dies ist die Standardauswahl} other {Hinweis: im Zweifelsfall \"{default_title}\" auswählen}}",
"project.settings.compute-image-selector.software-env-info": "Die ausgewählte Softwareumgebung stellt alle Software bereit, die dieses Projekt nutzen kann. Wenn Sie zusätzliche Software benötigen, können Sie sie entweder im Projekt installieren oder den Support kontaktieren. Erfahren Sie mehr über <A1>Installation von Python-Paketen</A1>, <A2>Python Jupyter Kernel</A2>, <A3>R-Pakete</A3> und <A4>Julia-Pakete</A4>.",
"project.settings.compute-image-selector.software-env-info.cocalc_com": "Erfahren Sie mehr über spezifische Umgebungen im <A1>Software-Inventar</A1>. Momentaufnahmen dessen, was zu einem bestimmten Zeitpunkt verfügbar war, sind für jede Linie von Umgebungen verfügbar. Nur die aktuelle Standardumgebung wird regelmäßig aktualisiert.",
"project.settings.control.cpu_usage.info": "benutzte <b>{cpu_str}</b> CPU-Zeit seit Projektstart",
"project.settings.control.cpu_usage.label": "CPU-Nutzung",
"project.settings.control.idle_timeout.always_running.info": "Das Projekt wird <b>automatisch gestartet</b>, wenn es aus irgendeinem Grund stoppt (es werden alle <A>Init-Skripte</A> ausgeführt).",
Expand Down
Loading

0 comments on commit 5fc0a3e

Please sign in to comment.