diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 72abf40c660..5d3b156b396 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -9,13 +9,13 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + - uses: actions/checkout@v4 with: persist-credentials: false - name: Install Node.js - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af + uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: npm - run: npm ci - run: npm run build diff --git a/package-lock.json b/package-lock.json index 64e26539604..1f545f4b9c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@turbowarp/jszip": "^3.11.1", "@turbowarp/nanolog": "^0.2.0", "@turbowarp/scratch-l10n": "^3.1001.0-202401241456-994097a5", - "@turbowarp/scratch-storage": "^0.0.202502192258", + "@turbowarp/scratch-storage": "^0.0.202505311821", "@turbowarp/scratch-svg-renderer": "^1.0.0-202312242305-12c360b", "@turbowarp/startaudiocontext": "^1.0.0", "arraybuffer-loader": "^1.0.6", @@ -4019,17 +4019,15 @@ } }, "node_modules/@turbowarp/scratch-storage": { - "version": "0.0.202502192258", - "resolved": "https://registry.npmjs.org/@turbowarp/scratch-storage/-/scratch-storage-0.0.202502192258.tgz", - "integrity": "sha512-74NnOz0THySIaZLydya3M6zuIedjUcMlbxY8xNc/yH+6bGGmP5S7WyhwHd/8LAgOslT+R6EaIXppWb0eyktUqg==", - "license": "BSD-3-Clause", + "version": "0.0.202505311821", + "resolved": "https://registry.npmjs.org/@turbowarp/scratch-storage/-/scratch-storage-0.0.202505311821.tgz", + "integrity": "sha512-Q1lYZjZspPrimODclXe4hgYuqoxitKnWAqBPv50Z5GBUdIM6Yu3+lNtrHQbEQxJTbeuTDpHJYKzwbpvCPUK8iA==", "dependencies": { "@babel/runtime": "7.21.0", "@turbowarp/nanolog": "^0.2.0", "arraybuffer-loader": "^1.0.3", "base64-js": "1.3.0", "cross-fetch": "3.1.5", - "fastestsmallesttextencoderdecoder": "^1.0.7", "js-md5": "0.7.3", "worker-loader": "^2.0.0" } diff --git a/package.json b/package.json index 173f879e9fc..ed42d52ded7 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@turbowarp/jszip": "^3.11.1", "@turbowarp/nanolog": "^0.2.0", "@turbowarp/scratch-l10n": "^3.1001.0-202401241456-994097a5", - "@turbowarp/scratch-storage": "^0.0.202502192258", + "@turbowarp/scratch-storage": "^0.0.202505311821", "@turbowarp/scratch-svg-renderer": "^1.0.0-202312242305-12c360b", "@turbowarp/startaudiocontext": "^1.0.0", "arraybuffer-loader": "^1.0.6", diff --git a/src/addons/addons/middle-click-popup/BlockTypeInfo.js b/src/addons/addons/middle-click-popup/BlockTypeInfo.js index c4c29f47560..8370ca85bf4 100644 --- a/src/addons/addons/middle-click-popup/BlockTypeInfo.js +++ b/src/addons/addons/middle-click-popup/BlockTypeInfo.js @@ -207,7 +207,7 @@ export class BlockInputEnum extends BlockInput { this.values = []; for (let i = 0; i < options.length; i++) { if (typeof options[i][1] === "string" && BlockInputEnum.INVALID_VALUES.indexOf(options[i][1]) === -1) { - this.values.push({ value: options[i][1], string: options[i][0].replaceAll(String.fromCharCode(160), " ") }); + this.values.push({ value: options[i][1], string: options[i][0].replace(/\u00a0/g, " ") }); } } this.isRound = isRound; diff --git a/src/addons/addons/middle-click-popup/WorkspaceQuerier.js b/src/addons/addons/middle-click-popup/WorkspaceQuerier.js index defb4b9925e..0e2a14228ef 100644 --- a/src/addons/addons/middle-click-popup/WorkspaceQuerier.js +++ b/src/addons/addons/middle-click-popup/WorkspaceQuerier.js @@ -1072,7 +1072,7 @@ class QueryInfo { /** @type {WorkspaceQuerier} */ this.querier = querier; /** @type {string} The query */ - this.str = query.replaceAll(String.fromCharCode(160), " "); + this.str = query.replace(/\u00a0/g, " "); /** @type {string} A lowercase version of the query. Used for case insensitive comparisons. */ this.lowercase = this.str.toLowerCase(); /** @type {number} A unique identifier for this query */ diff --git a/src/addons/addons/onion-skinning/userscript.js b/src/addons/addons/onion-skinning/userscript.js index cc2692d0ebe..ba75495f84d 100644 --- a/src/addons/addons/onion-skinning/userscript.js +++ b/src/addons/addons/onion-skinning/userscript.js @@ -1,3 +1,5 @@ +import {sanitizeSvg} from '@turbowarp/scratch-svg-renderer'; + export default async function ({ addon, console, msg }) { const paper = await addon.tab.traps.getPaper(); @@ -300,6 +302,8 @@ export default async function ({ addon, console, msg }) { const makeVectorOnion = (opacity, costume, asset, isBefore) => new Promise((resolve, reject) => { + asset = sanitizeSvg.sanitizeSvgText(asset); + const { rotationCenterX, rotationCenterY } = costume; // https://github.com/scratchfoundation/scratch-paint/blob/cdf0afc217633e6cfb8ba90ea4ae38b79882cf6c/src/containers/paper-canvas.jsx#L196-L218 asset = asset.split(/<\s*svg:/).join("<"); diff --git a/src/addons/addons/reorder-custom-inputs/modified-funcs.js b/src/addons/addons/reorder-custom-inputs/modified-funcs.js index 56aee8fd1f1..c289815a97f 100644 --- a/src/addons/addons/reorder-custom-inputs/modified-funcs.js +++ b/src/addons/addons/reorder-custom-inputs/modified-funcs.js @@ -33,7 +33,7 @@ export function modifiedCreateAllInputs(connectionMap) { } // remove all traces of %l at the earliest possible time - this.procCode_ = this.procCode_.replaceAll("%l ", ""); + this.procCode_ = this.procCode_.replace(/%l /g, ""); } //https://github.com/scratchfoundation/scratch-blocks/blob/f210e042988b91bcdc2abeca7a2d85e178edadb2/blocks_vertical/procedures.js#L565 diff --git a/src/addons/generated/upstream-meta.json b/src/addons/generated/upstream-meta.json index 27f3f94c6dc..f1f918e6046 100644 --- a/src/addons/generated/upstream-meta.json +++ b/src/addons/generated/upstream-meta.json @@ -1 +1 @@ -{"commit":"c237cfa"} \ No newline at end of file +{"commit":"df5f51e"} \ No newline at end of file diff --git a/src/addons/settings/translations.json b/src/addons/settings/translations.json index 2c239307daf..c39d53c6a3d 100644 --- a/src/addons/settings/translations.json +++ b/src/addons/settings/translations.json @@ -125,13 +125,16 @@ }, "fr": { "addonFeedback": "Commentaires sur les addons", + "confirmResetAll": "Êtes-vous sûr de vouloir réinitialiser tous les paramètres des addons à leurs valeurs par défaut ?", "credits": "Crédits:", + "dirty": "Rechargez les onglets pour appliquer les paramètres.", "dirtyButton": "Recharger maintenant", "enableDangerous": "Cet addon est dangereux et va intentionnellement DÉSACTIVER certaines fonctionnalitées. La plupart des utilisateurs NE DOIVENT PAS activer cet addon. Êtes-vous sûr de vouloir l'activer ?", "export": "Exporter les paramètres", "groupDanger": "Dangereux ({number})", "groupOthers": "Autres ({number})", "import": "Importer les paramètres", + "noCompiler": "Cet addon ne fonctionne que lorsque le compilateur est désactivé via le menu Avancé > Désactiver le compilateur ou à l'aide de l'addon « Désactiver le compilateur dans l'éditeur ».", "noResults": "Aucun résultat.", "presets": "Préconfigurations", "reset": "Réinitialiser", @@ -194,7 +197,7 @@ "tagNew": "Új!", "tagRecommended": "Javasolt", "tagTheme": "Téma", - "title": "Kiegészítő-beállítások", + "title": "Kiegészítők beállításai", "unsupported": "Néhány kiegészítő nem érhető el ebben a böngészőben." }, "it": { @@ -653,12 +656,15 @@ "addonFeedback": "附加元件回饋", "confirmResetAll": "你確定要重設所有附件設定?", "credits": "感謝:", + "dirty": "重新加載頁面以套用設定", "dirtyButton": "重新載入", + "enableDangerous": "此插件非常危險,可能會停用功能。大部分使用者不應啟用此插件。你非常確定要開啟他嗎?", "export": "匯出設定", "groupDanger": "危險({number})", "groupNew": "全新({number})", "groupOthers": "其他({number})", "import": "匯入設定", + "noCompiler": "此插件只有在通過\"高級 > 禁用編譯器\"的選項或者使用\"禁用編譯器\"插件才可以正常運行。", "noResults": "沒有相符的結果。", "presets": "預設", "reset": "重設", diff --git a/src/components/gui/gui.css b/src/components/gui/gui.css index 3a0a0ec0d58..ad44099a38f 100644 --- a/src/components/gui/gui.css +++ b/src/components/gui/gui.css @@ -4,10 +4,12 @@ .page-wrapper { height: 100%; + display: flex; + flex-direction: column; } .body-wrapper { - height: calc(100% - $menu-bar-height); + flex-grow: 1; background-color: $ui-primary; } diff --git a/src/components/monitor/monitor.jsx b/src/components/monitor/monitor.jsx index 5d9ab4ddb58..1db8f33d9e3 100644 --- a/src/components/monitor/monitor.jsx +++ b/src/components/monitor/monitor.jsx @@ -45,7 +45,7 @@ const MonitorComponent = props => ( // TW: if export is defined, we always show it, even outside of the editor disable={!props.draggable && !props.onExport} holdToDisplay={props.mode === 'slider' ? -1 : 1000} - id={`monitor-${props.label}`} + id={`monitor-${props.id}`} > ( // positioning conflicts between the monitors `transform: scale` and // the context menus `position: fixed`. For more details, see // http://meyerweb.com/eric/thoughts/2011/09/12/un-fixing-fixed-elements-with-css-transforms/ - + {props.draggable && props.onSetModeToDefault && i.extensionId !== 'faceSensing') .map(i => translateGalleryItem(i, locale)) .map(toLibraryItem) ); diff --git a/src/containers/paint-editor-wrapper.jsx b/src/containers/paint-editor-wrapper.jsx index 33e1939942c..10358e691a2 100644 --- a/src/containers/paint-editor-wrapper.jsx +++ b/src/containers/paint-editor-wrapper.jsx @@ -3,7 +3,7 @@ import React from 'react'; import bindAll from 'lodash.bindall'; import VM from 'scratch-vm'; import PaintEditor from '../lib/tw-scratch-paint'; -import {inlineSvgFonts} from '@turbowarp/scratch-svg-renderer'; +import {inlineSvgFonts, sanitizeSvg} from '@turbowarp/scratch-svg-renderer'; import ErrorBoundaryHOC from '../lib/error-boundary-hoc.jsx'; import {openFontsModal} from '../reducers/modals'; @@ -71,11 +71,11 @@ class PaintEditorWrapper extends React.Component { vm, ...componentProps } = this.props; - + const costume = vm.getCostume(selectedCostumeIndex); return ( ( ); /** - * Set of fetch resource origins that were manually trusted by the user. + * Set of fetch resource hosts that were manually trusted by the user. * @type {Set} */ -const fetchOriginsTrustedByUser = new Set(); +const fetchHostsTrustedByUser = new Set(); /** - * Set of origins manually trusted by the user for embedding. + * Set of hosts manually trusted by the user for embedding. * @type {Set} */ -const embedOriginsTrustedByUser = new Set(); +const embedHostsTrustedByUser = new Set(); /** * @param {URL} parsed Parsed URL object @@ -298,16 +298,21 @@ class TWSecurityManagerComponent extends React.Component { return true; } const {showModal, releaseLock} = await this.acquireModalLock(); - const origin = (parsed.protocol === 'http:' || parsed.protocol === 'https:') ? parsed.origin : null; - if (origin && fetchOriginsTrustedByUser.has(origin)) { + const host = ( + parsed.protocol === 'http:' || + parsed.protocol === 'https:' || + parsed.protocol === 'ws:' || + parsed.protocol === 'wss:' + ) ? parsed.host : null; + if (host && fetchHostsTrustedByUser.has(host)) { releaseLock(); return true; } const allowed = await showModal(SecurityModals.Fetch, { url }); - if (origin && allowed) { - fetchOriginsTrustedByUser.add(origin); + if (host && allowed) { + fetchHostsTrustedByUser.add(host); } return allowed; } @@ -406,15 +411,15 @@ class TWSecurityManagerComponent extends React.Component { if (!parsed) { return false; } - const origin = (parsed.protocol === 'http:' || parsed.protocol === 'https:') ? parsed.origin : null; + const host = (parsed.protocol === 'http:' || parsed.protocol === 'https:') ? parsed.host : null; const {showModal, releaseLock} = await this.acquireModalLock(); - if (origin && embedOriginsTrustedByUser.has(origin)) { + if (host && embedHostsTrustedByUser.has(host)) { releaseLock(); return true; } const allowed = await showModal(SecurityModals.Embed, {url}); - if (origin && allowed) { - embedOriginsTrustedByUser.add(origin); + if (host && allowed) { + embedHostsTrustedByUser.add(host); } return allowed; } diff --git a/src/lib/libraries/extensions/faceSensing/face-sensing-small.svg b/src/lib/libraries/extensions/faceSensing/face-sensing-small.svg new file mode 100644 index 00000000000..e6ed357d23b --- /dev/null +++ b/src/lib/libraries/extensions/faceSensing/face-sensing-small.svg @@ -0,0 +1,255 @@ + + + + + + Extensions/Software/Video-Sensing-Block + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/lib/libraries/extensions/faceSensing/face-sensing.svg b/src/lib/libraries/extensions/faceSensing/face-sensing.svg new file mode 100644 index 00000000000..a02749da2f1 --- /dev/null +++ b/src/lib/libraries/extensions/faceSensing/face-sensing.svg @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/lib/libraries/extensions/index.jsx b/src/lib/libraries/extensions/index.jsx index a86c7191e2b..114bd1aa31e 100644 --- a/src/lib/libraries/extensions/index.jsx +++ b/src/lib/libraries/extensions/index.jsx @@ -10,6 +10,9 @@ import penInsetIconURL from './pen/pen-small.svg'; import videoSensingIconURL from './videoSensing/video-sensing.png'; import videoSensingInsetIconURL from './videoSensing/video-sensing-small.svg'; +import faceSensingIconURL from './faceSensing/face-sensing.svg'; +import faceSensingInsetIconURL from './faceSensing/face-sensing-small.svg'; + import text2speechIconURL from './text2speech/text2speech.png'; import text2speechInsetIconURL from './text2speech/text2speech-small.svg'; @@ -116,6 +119,28 @@ export default [ tags: ['scratch'], featured: true }, + { + name: ( + + ), + extensionId: 'faceSensing', + extensionURL: 'https://blockextensions.codetorch.net/extensions/lab/face-sensing.js', + iconURL: faceSensingIconURL, + insetIconURL: faceSensingInsetIconURL, + description: ( + + ), + tags: ['scratch'], + featured: true + }, { name: ( typeof a === 'undefined'; +const circularReplacer = () => { + const stack = new Set(); + return (_, value) => { + if (typeof value === 'object' && value !== null) { + if (stack.has(value)) return Array.isArray(value) ? '[...]' : '{...}'; + stack.add(value); + } + return value; + }; +}; + /** * Convert monitors from VM format to what the GUI needs to render. * - Convert opcode to a label and a category @@ -32,18 +43,26 @@ export default function ({id, spriteName, opcode, params, value, vm}) { value = Number(value.toFixed(6)); } - // Turn the value to a string, for handle boolean values + // Turn the value to a string, to handle boolean values if (typeof value === 'boolean') { value = value.toString(); } - // Lists can contain booleans, which should also be turned to strings + // Turn the value to a string, to handle JSON values + // do not convert arrays as it will be confused for lists + if (typeof value === 'object' && !Array.isArray(value)) { + value = JSON.stringify(value, circularReplacer()); + } + + // Lists can contain booleans or Objects, which should also be turned to strings if (Array.isArray(value)) { value = value.slice(); for (let i = 0; i < value.length; i++) { const item = value[i]; if (typeof item === 'boolean') { value[i] = item.toString(); + } else if (typeof value[i] === 'object' && !Array.isArray(value[i])) { + value[i] = JSON.stringify(item, circularReplacer()); } } } diff --git a/src/lib/sb-file-uploader-hoc.jsx b/src/lib/sb-file-uploader-hoc.jsx index d199e2cbe3d..5c5cd44ef7c 100644 --- a/src/lib/sb-file-uploader-hoc.jsx +++ b/src/lib/sb-file-uploader-hoc.jsx @@ -88,9 +88,14 @@ const SBFileUploaderHOC = function (WrappedComponent) { { description: 'Scratch Project', accept: { - // Using application/x.scratch.sb3 as done in scratch-vm causes file pickers - // to disallow picking any items in Chrome 133 on Android. - 'application/octet-stream': ['.sb', '.sb2', '.sb3', '.torch'] + // Chrome on Android tracks the MIME type of files that get downloaded and + // then actually enforces that the type must match in showOpenFilePicker() + // and does not allow the user to override the filter. As Scratch projects have + // no well-defined and well-adopted MIME types, we can't assume anything about + // what MIME type they are saved with, so we have to use the most broad MIME + // type here. Otherwise some users just won't be able to load files for no + // fault of their own. + '*/*': ['.sb', '.sb2', '.sb3', '.torch'] } } ] @@ -107,8 +112,7 @@ const SBFileUploaderHOC = function (WrappedComponent) { if (err && err.name === 'AbortError') { return; } - // eslint-disable-next-line no-console - console.error(err); + log.error(err); } })(); } else { diff --git a/src/lib/tw-translations/generated-translations.json b/src/lib/tw-translations/generated-translations.json index a903384f7a6..5de1750e4e6 100644 --- a/src/lib/tw-translations/generated-translations.json +++ b/src/lib/tw-translations/generated-translations.json @@ -65,7 +65,6 @@ "tw.fonts.title": "Tipus de lletra", "tw.footer.credits": "Crèdits", "tw.footer.documentation": "Documentació", - "tw.footer.donate": "Fes una donació", "tw.footer.embed": "Incrustació web", "tw.footer.parameters": "Paràmetres d'URL", "tw.geolocate.permission": "Si es permet, és possible que el navegador us demani que autoritzeu l'accés a la ubicació.", @@ -309,6 +308,11 @@ "tw.blocks.mouseButton.primary": "(0) linke", "tw.blocks.mouseButton.secondary": "(2) rechte", "tw.blocks.openDocs": "Dokumentation öffnen", + "tw.browserModal.desktopSettings": "Desktopeinstellungen öffnen", + "tw.browserModal.desktopTitle": "System nicht unterstützt", + "tw.browserModal.webgl1": "{APP_NAME} benötigt WebGL, aber anscheinend wird es von deinem Computer nicht unterstützt. Dies ist meist ein temporärer Fehler, der durch einen Neustart des Computers behoben werden kann.", + "tw.browserModal.webglBrowser": "Nutze eine aktuelle Version von Chrome, Firefox oder Safari und stelle sicher, dass deine Grafiktreiber aktuell sind. Du kannst auch versuchen, die \"Grafikbeschleunigung\" bzw. \"Hardwarebeschleunigung\" in den Browsereinstellungen ein- bzw. auszuschalten.", + "tw.browserModal.webglDesktop": "Du kannst auch versuchen, die \"Grafikbeschleunigung\" in den Desktopeinstellungen ein- bzw. auszuschalten:", "tw.cantUseCloud": "Obwohl du Cloud-Variablen erstellen kannst, werden sie bis zum Hochladen auf Scratch oder auf einem Tool wie dem {packager} nicht funktionieren.", "tw.changeUsername.cannotChangeWhileRunning": "Der Benutzername kann nicht geändert werden, während das Projekt ausgeführt wird.", "tw.clipboard.danger": "Wenn deine Zwischenablage Sachen wie Passwörter einthält, könnte das Projekt in der Lage sein, sie mit anderen Nutzern oder Servern zu teilen.", @@ -338,10 +342,15 @@ "tw.darkMode": "Zu hellem Modus wechseln", "tw.desktopCloud": "In der Desktop-App werden Cloud-Variablen nur zwischen den Fenstern der Desktop-App synchronisiert. Lade das Projekt auf Scratch hoch oder nutze ein Tool wie den {packager}, um sie weltweit zu synchronisieren. ", "tw.documentation": "Dokumentation", + "tw.download.danger": "Diese Datei wurde nicht von den {APP_NAME}-Entwicklern geprüft.", + "tw.download.executable": "Dies ist ein ausführbares Dateiformat, das schädlichen Code enthalten könnte.", + "tw.download.file": "Dieses Projekt möchte eine Datei auf deinen Computer herunterladen. Es wird als {name} in deinem \"Downloads\"-Ordner gespeichert.", "tw.embed.persistent": "Wenn zugelassen, werden künftige EInbettungen zur selben Seite automatisch zugelassen.", "tw.embed.risks": "Während die Einbettung isoliert sein wird, wird sie weiterhin Zugriff auf Geräteinformationen wie deine IP-Adresse und Region haben.", "tw.embed.title1": "Dieses Projekt möchte HTML-Inhalt über die Bühne einbetten:", "tw.embed.title2": "Dieses Projekt möchte eine andere Seite über die Bühne einbetten:", + "tw.extension.faceSensing.description": "Erkenne Gesichter mit der Kamera.", + "tw.extension.faceSensing.name": "Gesichtserkennung", "tw.extensionGallery.error": "Erweiterungen-Sammlung konnte nicht laden werden. Besuche extensions.turbowarp.org, um mehr Erweiterungen zu finden.", "tw.extensionGallery.loading": "Erweiterungen werden geladen…", "tw.extensionGallery.more": "Erfahre mehr auf extensions.turbowarp.org.", @@ -371,7 +380,6 @@ "tw.footer.credits": "Danksagungen", "tw.footer.disclaimer": "{APP_NAME} ist nicht mit Scratch, dem Scratch Team oder der Scratch Foundation assoziiert.", "tw.footer.documentation": "Dokumentation", - "tw.footer.donate": "Spenden", "tw.footer.embed": "Einbettung", "tw.footer.parameters": "URL-Parameter", "tw.footer.scratchDisclaimer": "Scratch ist ein Projekt der Scratch Foundation. Es ist unter {scratchDotOrg} kostenlos verfügbar.", @@ -452,6 +460,7 @@ "tw.restorePoints.description": "{APP_NAME}speichert periodisch Wiederherstellpunkte auf deinem Computer, damit dein Projekt wiederhergestellt werden kann, wenn du vergisst, zu speichern. Dies ist als letzter Ausweg für Wiederherstellung gedacht. Dein Computer kann jederzeit diese Wiederherstellpunkte unbemerkt löschen. Verlasse dich NICHT auf dieses Feature.", "tw.restorePoints.empty": "Keine Wiederherstellpunkte gefunden.", "tw.restorePoints.error": "Fehler beim Laden des Wiederherstellpunktes: {error}", + "tw.restorePoints.exportError": "Fehler beim Exportieren des Wiederherstellungspunkts: {error}", "tw.restorePoints.intervalOption": "Wiederherstellpunkte werden {time} erstellt.", "tw.restorePoints.loading": "Laden...", "tw.restorePoints.minutes": "alle {n} Minuten ", @@ -505,6 +514,7 @@ "tw.twExtension.description": "Seltsame neue Blöcke.", "tw.twExtension.name": "Blöcke von {APP_NAME}", "tw.unfavorite": "Aus Favoriten entfernen", + "tw.unknownPlatform.1": "Dieses Projekt wurde für eine andere Plattform entwickelt:", "tw.unknownPlatform.2": "Die Kompatibilität mit {APP_NAME} kann nicht garantiert werden. Du kannst auf eigene Gefahr fortfahren, aber wir könnten nicht in der Lage zu sein, dir bei Problemen zu helfen.", "tw.unknownPlatform.continue": "Verstanden", "tw.unknownPlatform.title": "Unbekannte Plattform", @@ -595,7 +605,6 @@ "tw.fonts.title": "Fuentes", "tw.footer.credits": "Créditos", "tw.footer.documentation": "Documentación", - "tw.footer.donate": "Donar", "tw.footer.embed": "Incrustado", "tw.footer.parameters": "Parámetros de URL", "tw.geolocate.permission": "Si se permite, puede que su navegador le pida acceso a su ubicación.", @@ -756,6 +765,11 @@ "tw.blocks.mouseButton.primary": "(0) ensisijainen", "tw.blocks.mouseButton.secondary": "(2) toissijainen", "tw.blocks.openDocs": "Avaa opas", + "tw.browserModal.desktopSettings": "Avaa selaimen asetukset", + "tw.browserModal.desktopTitle": "Järjestelmää ei tueta", + "tw.browserModal.webgl1": "{APP_NAME} vaatii WebGL:n, mutta tietokoneesi ei vaikuta tukevan sitä. Tämä virhe on usein väliaikainen, ja voit korjata sen käynnistämällä tietokoneesi uudelleen.", + "tw.browserModal.webglBrowser": "Käytä Chromen, Firefoxin tai Safarin uutta versiota ja varmista, että grafiikka-ajurisi ovat ajan tasalla. Voit myös kytkeä \"grafiikkakiihdytys\"- tai \"laitteistokiihdytys\"-asetuksen päälle tai pois selaimesi asetuksissa.", + "tw.browserModal.webglDesktop": "Voit myös koettaa kytkeä \"grafiikkakiihdytys\"-asetuksen päälle tai pois selaimen asetuksissa:", "tw.cantUseCloud": "Vaikka voit luoda pilvimuuttujia, ne eivät toimi, ellei tätä projektia ladata Scratchiin tai muunneta {packager} -pakkauskoneen kaltaisella työkalulla.", "tw.changeUsername.cannotChangeWhileRunning": "Käyttäjänimeä ei voi muuttaa, kun projekti on käynnissä.", "tw.clipboard.danger": "Jos leikepöytäsi sisältää salasanojen kaltaisia asioita, projekti saattaa voida jakaa niitä muiden käyttäjien tai palvelimien kanssa.", @@ -787,6 +801,9 @@ "tw.darkMode": "Vaihda vaaleaan tilaan", "tw.desktopCloud": "Työpöytäsovelluksessa pilvimuuttujat synkronoituvat kaikkien tämän tietokoneen sovellusikkunoiden välillä. Lataa projekti Scratchiin tai käytä {packager} -pakkauskonetta, jotta ne synkronoituvat maailmanlaajuisesti.", "tw.documentation": "Opas", + "tw.download.danger": "{APP_NAME}in kehittäjät eivät ole tarkastaneet tätä tiedostoa.", + "tw.download.executable": "Tämä on ajotiedosto, joka saattaa olla suoritettaessa haitallinen.", + "tw.download.file": "Projekti haluaa ladata tiedoston tietokoneellesi. Se tallennetaan nimellä {name} Ladatut tiedostot -kansioosi.", "tw.embed.persistent": "Jos sallit tämän, tulevat upotukset samalta sivustolta sallitaan automaattisesti.", "tw.embed.risks": "Vaikka upotus on hiekkalaatikossa, sillä on silti pääsy laitteesi tietoihin, kuten IP-osoitteeseen ja likimääräiseen sijaintiin.", "tw.embed.title1": "Projekti haluaa upottaa HTML-sisältöä esiintymislavan ylle:", @@ -820,7 +837,6 @@ "tw.footer.credits": "Tekijät", "tw.footer.disclaimer": "{APP_NAME} ei ole kytköksissä Scratchiin, Scratch-tiimiin tai Scratch-säätiöön.", "tw.footer.documentation": "Opas", - "tw.footer.donate": "Lahjoita", "tw.footer.embed": "Upottaminen", "tw.footer.parameters": "URL-parametrit", "tw.footer.scratchDisclaimer": "Scratch on Scratch-säätiön projekti. Se on saatavilla ilmaiseksi osoitteessa {scratchDotOrg}.", @@ -905,6 +921,7 @@ "tw.restorePoints.description": "{APP_NAME} tallentaa säännöllisesti palautuskohtia tietokoneellesi, jotta voit saada projektisi takaisin, jos unohdat tallentaa. Tämä on tarkoitettu viimeiseksi palautuskeinoksi. Tietokoneesi voi kaikessa hiljaisuudessa poistaa nämä palautuskohdat milloin tahansa. ÄLÄ LUOTA tähän toimintoon.", "tw.restorePoints.empty": "Palautuskohtia ei löytynyt.", "tw.restorePoints.error": "Virhe palautuskohtaa ladatessa: {error}", + "tw.restorePoints.exportError": "Palautuskohdan viennissä tapahtui virhe: {error}", "tw.restorePoints.intervalOption": "Luo palautuskohta {time}.", "tw.restorePoints.loading": "Ladataan...", "tw.restorePoints.minutes": "{n} minuutin välein", @@ -961,6 +978,7 @@ "tw.twExtension.description": "Erikoisia uusia lohkoja.", "tw.twExtension.name": "{APP_NAME}in lohkot", "tw.unfavorite": "Poista suosikeista", + "tw.unknownPlatform.1": "Projekti on tehty eri alustalle:", "tw.unknownPlatform.2": "Yhteensopivuutta {APP_NAME}in kanssa ei ole taattu. Voit jatkaa omalla vastuullasi, mutta emme voi auttaa, jos ongelmia ilmenee.", "tw.unknownPlatform.continue": "Ymmärrän", "tw.unknownPlatform.title": "Tuntematon alusta", @@ -982,25 +1000,51 @@ "tw.viewOnScratch": "Näytä projekti Scratchissa" }, "fr": { + "tw.accent.blue": "Bleu", + "tw.accent.purple": "Violet", + "tw.accent.rainbow": "Arc-en-ciel", + "tw.accent.red": "Rouge", "tw.alerts.creatingRestorePoint": "Création d'un point de restauration…", "tw.alerts.lostPeripheralConnection": "Le périphérique {extensionName} vient d’être déconnecté.", "tw.alerts.savedToDisk": "Enregistré sur votre ordinateur.", "tw.backpack.rename": "Nouveau nom :", + "tw.blockColors.highContrast": "Contraste élevé", "tw.blocks.buttonIsDown": "bouton [MOUSE_BUTTON] de la souris pressé ?", "tw.blocks.lastKeyPressed": "dernière touche pressée", "tw.blocks.mouseButton.middle": "(1) milieu", "tw.blocks.mouseButton.primary": "(0) primaire", "tw.blocks.mouseButton.secondary": "(2) secondaire", "tw.blocks.openDocs": "Ouvrir la documentation", + "tw.browserModal.desktopTitle": "Système non pris en charge", "tw.cantUseCloud": "Bien que vous puissiez créer des variables cloud, elles ne fonctionneront que si ce projet est téléchargé sur Scratch ou converti à l'aide d'un outil comme le{packager}.", "tw.changeUsername.cannotChangeWhileRunning": "Le nom d'utilisateur ne peut pas être modifié pendant l'exécution du projet.", "tw.code": "Code source", "tw.confirmIncompatibleExtension": "Cette extension est incompatible avec Scratch. Les projets réalisés avec lui ne peuvent pas être téléchargés sur le site Web de Scratch. Voulez-vous vraiment l'activer ?", + "tw.createdBy": "Créé par :", "tw.customExtension.name": "Extension customisée", + "tw.customExtensionModal.load": "Charger", + "tw.customExtensionModal.promptFile": "Sélectionnez ou déposez les fichiers JavaScript des extensions", + "tw.customExtensionModal.promptText": "Collez le code source JavaScript de l'extension :", + "tw.customExtensionModal.promptURL": "Entrez l'URL de l'extension :", + "tw.customExtensionModal.trusted": "Cette extension sera chargée sans la sandbox car elle provient d'une source fiable.", + "tw.customExtensionModal.unsandboxed": "Exécuter sans la sandbox", + "tw.customExtensionModal.unsandboxedWarning1": "Le chargement d'extensions sans sandbox est dangereux et ne doit pas être activé si vous ne savez pas ce que vous faites.", + "tw.customExtensionModal.unsandboxedWarning2": "Les extensions non sandboxées peuvent corrompre votre projet, supprimer vos paramètres, voler vos mots de passe et causer d'autres dommages. Les développeurs de {APP_NAME} ne sont pas responsables des problèmes qui pourraient en résulter.", + "tw.customExtensionModal.untrusted": "Les extensions provenant d'URL non fiables seront toujours chargées avec la sandbox pour des raisons de sécurité.", + "tw.darkMode": "Basculer sur le mode clair", + "tw.favorite": "Ajouter aux favoris", "tw.featuredProjectsStudio": "Voir le studio sur scratch.", "tw.feedback": "retour et signalement de bugues", + "tw.fileInput.none": "Aucun fichier sélectionné.", + "tw.fileInput.selected": "Sélectionné : {names}", + "tw.fonts.add": "Ajouter", + "tw.fonts.custom.file": "Sélectionnez un fichier de police sur votre ordinateur :", + "tw.fonts.custom.name": "Donnez un nom à la police :", + "tw.fonts.fallback": "Choisissez une police de remplacement à utiliser si la police ne parvient pas à se charger ou est supprimée :", + "tw.fonts.readError": "Échec de la lecture du fichier de police : {error}", + "tw.fonts.system.name": "Saisissez le nom d'une police intégrée à votre ordinateur. Il est possible que la police ne s'affiche pas correctement pour tout le monde.", + "tw.fonts.title": "Polices", "tw.footer.credits": "Crédits", - "tw.footer.donate": "Faire un don", "tw.footer.embed": "Intégrer", "tw.footer.parameters": "Paramères URL", "tw.gui.crashMessage.description": "Nous sommes vraiment désolés, mais il semble que TurboWarp a crashé. Veuillez actualiser la page pour réessayer.", @@ -1011,7 +1055,10 @@ "tw.invalidParameters.clones": "Le paramètre d'URL \"clone\" n'est pas valide.", "tw.invalidParameters.fps": "Le paramètre d'URL \"fps\" n'est pas valide.", "tw.invalidProject.title": "Erreur", + "tw.lightMode": "Baculer sur le mode sombre", + "tw.loadExtension.unsandboxed": "Exécuter sans la sandbox", "tw.loader.downloadingAssets": "Téléchargement des assets ({complete}/{total}) ...", + "tw.loader.loadingAssets": "Chargement des assets ({complete}/{total})...", "tw.loader.projectData": "Lecture du projet ...", "tw.menuBar.60off": "Désactiver le mode 60 FPS", "tw.menuBar.60on": "Activer le mode 60 FPS", @@ -1024,6 +1071,7 @@ "tw.menuBar.compileError": "{sprite} : {error}", "tw.menuBar.moreSettings": "Paramètres Avancés", "tw.menuBar.newFramerate": "Nouveau ratio d'images par seconde :", + "tw.menuBar.newWindow": "Nouvelle fenêtre", "tw.menuBar.package": "Empaqueter le projet", "tw.menuBar.reportError2": "Ceci est un bug. Merci de le signaler.", "tw.menuBar.saveAs": "Enregistrer sous {file}", @@ -1034,11 +1082,23 @@ "tw.opcode.mousex": "souris x", "tw.opcode.mousey": "souris y", "tw.openAdvanced": "Ouvrir les paramètres avancés", + "tw.openWindow.dangerous": "Ce site web n'a pas été vérifié par les développeurs de {APP_NAME}. Il peut contenir du code dangereux ou malveillant.", "tw.paint.alpha": "Opacité", + "tw.paint.fonts.more": "Ajouter d'autres polices...", "tw.privacy": "Politique de Confidentialité", + "tw.recordAudio.title": "Le projet souhaite enregistrer le son provenant de votre microphone. Il peut s'agir d'une transcription textuelle ou de données audio brutes. Le projet peut être en mesure de partager le son avec d'autres utilisateurs ou serveurs.", + "tw.recordVideo.permission": "Si vous l'autorisez, votre navigateur peut vous demander d'activer l'accès à la caméra, et tout accès ultérieur à la caméra sera automatiquement autorisé.", + "tw.recordVideo.title": "Le projet souhaite enregistrer des vidéos à partir de votre caméra. Le projet peut être en mesure de partager des images avec d'autres utilisateurs ou serveurs.", + "tw.redirect.dangerous": "Ce site web n'a pas été vérifié par les développeurs de {APP_NAME}. Il peut contenir du code dangereux ou malveillant.", + "tw.redirect.title": "Le projet souhaite naviguer vers cette URL à partir de cet onglet :", + "tw.restorePoints.deleteAll": "Tout supprimer", + "tw.restorePoints.loading": "Chargement...", "tw.saveAs": "Enregistrer sous...", "tw.saveTo": "Sauvegarder sous {file}", "tw.scratchUnsafeCloud": "Si vous créez cette variable cloud, le projet dépassera la limite de Scratch de {number} variables, et certaines variables ne fonctionneront pas si vous téléchargez le projet dans Scratch.", + "tw.securityManager.allow": "Autoriser", + "tw.securityManager.deny": "Refuser", + "tw.securityManager.title": "Sécurité des extensions", "tw.settingsModal.customStageSize": "Taille de la scène personnalisé :", "tw.settingsModal.customStageSizeHelp": "Change la taille de la scène Scratch de 480x360 à autre chose. Essayez 640x360 pour rendre la scène grand écran. Très peu de projets gèrent cela correctement.", "tw.settingsModal.dangerZone": "Zone de danger", @@ -1071,6 +1131,7 @@ "tw.studioview.error": "Il y a eu une erreur dans le chargement de la page suivante des projets", "tw.studioview.hoverText": "{title} fait par {author}", "tw.tooLarge": "Ce son peut être trop volumineux pour être chargé dans Scratch.", + "tw.unfavorite": "Supprimer des favoris", "tw.unshared.2": "Pour plus d'informations, visitez : {link}", "tw.unshared.cache": "Si le projet a été partagé récemment, ce message peut s'afficher de manière incorrecte pendant quelques minutes.", "tw.usernameModal.help": "Cette valeur sera stockée dans la mémoire de votre navigateur. Il peut être consigné lorsque vous interagissez avec des projets contenant des variables cloud.", @@ -1079,50 +1140,143 @@ "tw.usernameModal.mustChange.resetIt": "réinitialiser (recommandé)", "tw.usernameModal.reset": "Réinitialiser", "tw.usernameModal.title": "Changer votre nom d'utilisateur", + "tw.usesCloudVariables": "Ce projet utilise des variables cloud.", "tw.viewFeaturedProjects": "Cliquez pour voir les projets sélectionnés.", "tw.viewOnScratch": "Voir le projet sur Scratch" }, "he": { + "tw.accent.blue": "כחול", + "tw.accent.purple": "סגול", + "tw.accent.rainbow": "צבעוני", + "tw.accent.red": "אדום", "tw.alerts.creatingRestorePoint": "ביצוע נקודת שחזור קוד", + "tw.alerts.lostPeripheralConnection": "איבד חיבור ל{extensionName}.", "tw.alerts.savedToDisk": "הקובץ נשמר בהתקן שלך.", + "tw.backpack.rename": "שם חדש:", + "tw.blockColors.dark": "כהה (בטא)", + "tw.blockColors.highContrast": "ניגודיות גבוהה", + "tw.blockColors.three": "מקורי", "tw.blocks.addons": "הרחבות", "tw.blocks.buttonIsDown": "[MOUSE_BUTTON]לחצן העכבר נלחץ?", "tw.blocks.lastKeyPressed": "מקש אחרון שנלחץ על המקלדת", "tw.blocks.mouseButton.middle": "(1) במרכז", "tw.blocks.mouseButton.primary": "(0)נורמלי", "tw.blocks.mouseButton.secondary": "(2) שני", + "tw.blocks.openDocs": "פתח מסמכים", + "tw.browserModal.desktopTitle": "המערכת לא נתמכת", "tw.changeUsername.cannotChangeWhileRunning": "אינך יכול לשנות את שם המשתמש שלך כאשר פרויקט הקוד פועל.", + "tw.cloudProvider": "השרת מופעל על ידי {name}.", + "tw.cloudServers": "בחר את השרת הקרוב אליך:", "tw.code": "קוד קוד פתוח", + "tw.createdBy": "נוצר על ידי:", + "tw.customExtension.name": "הרחבה מותאמת אישית", + "tw.customExtensionModal.file": "קבצים", + "tw.customExtensionModal.load": "העלאה", + "tw.customExtensionModal.promptURL": "הזן את כתובת האתר של ההרחבה:", + "tw.customExtensionModal.text": "טקסט", + "tw.customExtensionModal.title": "העלה הרחבה מותאמת אישית", + "tw.customExtensionModal.unsandboxed": "הפעל ללא ארגז חול", + "tw.customExtensionModal.unsandboxedWarning1": "טעינת תוספים ללא ארגז חול מסוכנת ואין להפעיל אותה אם אתה לא יודע מה אתה עושה.", + "tw.customExtensionModal.url": "כתובת אתר", + "tw.darkMode": "החלף למצב בהיר", + "tw.documentation": "מסמכים", "tw.featuredProjectsStudio": "הצג את הסטודיו על קידוד שריטות", "tw.feedback": "הצעות ושגיאות", + "tw.feedbackButton": "משוב על {APP_NAME}", + "tw.fileInput.none": "אף קובץ לא נבחר.", + "tw.fileInput.selected": "נבחרו: {names}", + "tw.fonts.add": "הוספה", + "tw.fonts.list": "פונטים שהוספת:", + "tw.fonts.none": "אף פונט לא נוסף עוד.", + "tw.fonts.title": "פונטים", + "tw.footer.credits": "קרידיטים", + "tw.footer.disclaimer": "{APP_NAME} אינו קשור ל-Scratch, לצוות Scratch או לקרן Scratch.", + "tw.footer.documentation": "מסמכים", + "tw.footer.scratchDisclaimer": "Scratch הוא פרויקט של קרן Scratch. הוא זמין בחינם באתר {scratchDotOrg}.", + "tw.fps": "{framerate} פריימים לשנייה", "tw.gui.crashMessage.description": "אנו מתנצלים; נראה שהדף קרס. אנא רענן דף זה כדי לנסות שוב.", "tw.gui.defaultProjectTitle": "פרויקט קידוד", + "tw.guiDefaultTitle": "מריץ פרוייקטי Scratch מהר יותר", "tw.home.credit": "מידע וייחוסים", + "tw.home.description": "{APP_NAME} הוא מוד Scratch שממיר פרויקטים ל-JavaScript כדי לגרום להם לרוץ מהר מאוד. נסו זאת על ידי הזנת מזהה פרויקט או כתובת אתר למעלה או בחירת פרויקט מומלץ למטה.", "tw.home.instructions": "איך להישתמש", + "tw.input.tooltip": "העתק והדבק קישור לפרויקט Scratch כאן!", "tw.invalidParameters.clones": "פרמטר כתובת האתר \"כפול\" אינו חוקי", "tw.invalidParameters.fps": "פרמטר כתובת האתר \"מסגרות לשנייה\" אינו חוקי", + "tw.invalidProject.error": "לא הצלחנו לטעון את הפרויקט:", + "tw.invalidProject.reportIt": "דווח", + "tw.invalidProject.restorePoints": "צפה בנקודות השחזור", + "tw.invalidProject.title": "שגיאה", + "tw.lightMode": "החלף למצב כהה", + "tw.loadExtension.unsandboxed": "הפעל ללא ארגז חול", "tw.loader.downloadingAssets": "הורדה של נכסים({complete}/{total})...", - "tw.loader.projectData": "טוען קוד...", + "tw.loader.loadingAssets": "טוען נכסים ({complete} מתוך {total})...", + "tw.loader.projectData": "טוען פרויקט...", "tw.menuBar.60off": "כבה את מצב \"מסגרות גבוהות לשנייה\".", "tw.menuBar.60on": "הפעל את מצב \"פריימים גבוהים לשניה\".", "tw.menuBar.addons": "הרחבות", + "tw.menuBar.advanced": "מתקדם", + "tw.menuBar.blockColors": "צבעי בלוקים", "tw.menuBar.changeUsername": "לשנות את שם המשתמש", "tw.menuBar.cloudOff": "כבה את משתני השרת", "tw.menuBar.cloudOn": "אפשר משתני שרת", "tw.menuBar.cloudUnavailable": "משתני שרת אינם זמינים", "tw.menuBar.cloudUnavailableAlert": "משתני שרת אינם זמינים. אתה כנראה משתמש בעורך הקוד.", "tw.menuBar.compileError": "{sprite}:{error}", + "tw.menuBar.moreSettings": "הגדרות מתקדמות", "tw.menuBar.newFramerate": "קצב חדש של מסגרות לשנייה:", + "tw.menuBar.newWindow": "חלון חדש", + "tw.menuBar.package": "אריזת פרויקט", "tw.menuBar.reportError2": "יש שגיאה. אנא צור איתי קשר בנושא.", - "tw.menuBar.saveAs": "הורד בשם{file}", + "tw.menuBar.restorePoints": "נקודות שחזור", + "tw.menuBar.saveAs": "שמור בשם{file}", "tw.menuBar.seeInside": "עיין בקוד המקור", + "tw.mono": "מונו", + "tw.moreCloud": "למד עוד על משתני ענן.", + "tw.opcode.2000": "ימים מאז 2000", + "tw.opcode.mousedown": "עכבר נלחץ?", + "tw.opcode.mousex": "מיקום עכבר בציר x", + "tw.opcode.mousey": "מיקום עכבר בציר y", + "tw.openAdvanced": "פתח הגדרות מתקדמות", + "tw.paint.alpha": "שקיפות", + "tw.paint.fonts.more": "הוסף פונטים נוספים...", "tw.privacy": "מדיניות הפרטיות", + "tw.restorePoints.1minute": "כל דקה", + "tw.restorePoints.deleteAll": "מחק הכל", + "tw.restorePoints.empty": "לא נמצאו נקודות שחזור.", + "tw.restorePoints.loading": "טוען...", + "tw.restorePoints.minutes": "כל {n} דקות", + "tw.restorePoints.never": "לעולם לא", + "tw.restorePoints.title": "נקודות שחזור", + "tw.sample": "פרויקט דוגמה", + "tw.saveAs": "שמור בשם...", + "tw.saveTo": "עדכן את {file}", + "tw.scratchUnsafeCloud": "אם תיצור את משתנה הענן הזה, הפרויקט יחרוג ממגבלת {number} המשתנים של Scratch, וחלק מהמשתנים לא יפעלו אם תעלה את הפרויקט ל-Scratch.", + "tw.securityManager.allow": "אישור", + "tw.securityManager.deny": "ביטול", + "tw.settingsModal.customStageSize": "גודל במה מותאם אישית:", + "tw.settingsModal.help": "לחץ לעזרה", + "tw.settingsModal.highQualityPen": "עט באיכות גבוהה", + "tw.settingsModal.infiniteClones": "כפילים ללא הגבלה", + "tw.settingsModal.infiniteClonesHelp": "מבטל את מגבלת 300 הכפילים של Scratch.", + "tw.settingsModal.title": "הגדרות מתקדמות", + "tw.spriteSelectorItem.rename": "שינוי שם", + "tw.stereo": "סטריאו", "tw.studioview.authorAttribution": "על ידי{author}", "tw.studioview.error": "לא ניתן היה לטעון את העמוד הבא של פרויקטי קוד.", "tw.studioview.hoverText": "{title}נוצר על ידי{author}", + "tw.tooLarge": "הצליל הזה אולי יהיה גדול מדי בשביל Scratch.", + "tw.unknownPlatform.continue": "אני מבין", + "tw.unshared.2": "לעוד מידע, היכנס ל{link}.", + "tw.unshared2.1": "פרויקטים לא משותפים לא זמינים יותר לצפייה.", + "tw.usernameModal.new": "שם משתמש חדש:", "tw.usernameModal.reset": "אִתחוּל", "tw.usernameModal.title": "לשנות את שם המשתמש", - "tw.viewFeaturedProjects": "לחץ על כפתור זה כדי להציג פרויקטי קוד נבחרים." + "tw.usesCloudVariables": "פרויקט זה משתמש במשתני ענן.", + "tw.usesCloudVariables2": "משתני הענן של {APP_NAME} אינם מקושרים למשתני Scratch. כל אחד יכול {changeTheirUsername} לכל דבר, לכן היזהרו מהתחזות.", + "tw.usesCloudVariables2.change": "שינוי שם המשתמש", + "tw.viewFeaturedProjects": "לחץ על כפתור זה כדי להציג פרויקטי קוד נבחרים.", + "tw.viewOnScratch": "צפה בפרויקט בScratch." }, "hu": { "tw.accent.blue": "Kék", @@ -1130,6 +1284,7 @@ "tw.accent.rainbow": "Szivárvány", "tw.accent.red": "Piros", "tw.alerts.creatingRestorePoint": "Helyreállítási pont készítése...", + "tw.alerts.lostPeripheralConnection": "Kapcsolat a(z) {extensionName} nevű bővítményhez elveszítve", "tw.alerts.restorePointError": "Nem lehetett készíteni egy helyreállítási pontot", "tw.alerts.restorePointSuccess": "Helyreállítási pontok a \"Fájl\" menüben vannak", "tw.alerts.savedToDisk": "Mentve a számítógépre.", @@ -1138,7 +1293,10 @@ "tw.blockColors.dark": "Sötét (béta)", "tw.blockColors.highContrast": "Magas kontraszt", "tw.blockColors.three": "Eredeti", + "tw.blocks.PROCEDURES_DOCS": "Így használd a visszatérést", "tw.blocks.PROCEDURES_RETURN": "{v} visszaadása", + "tw.blocks.PROCEDURES_TO_REPORTER": "Értékblokká alakítás", + "tw.blocks.PROCEDURES_TO_STATEMENT": "Kirakóelemmé alakítás", "tw.blocks.addons": "Kiegészítők", "tw.blocks.buttonIsDown": "[MOUSE_BUTTON] egérbillentyű lenyomva?", "tw.blocks.lastKeyPressed": "utolsó lenyomott billentyű", @@ -1146,9 +1304,17 @@ "tw.blocks.mouseButton.primary": "(0) elsődleges", "tw.blocks.mouseButton.secondary": "(2) másodlagos", "tw.blocks.openDocs": "Dokumentáció megnyitása", + "tw.browserModal.desktopSettings": "Asztali beállítások megnyitása", + "tw.browserModal.desktopTitle": "A rendszer nem támogatott", + "tw.browserModal.webgl1": "A {APP_NAME} WebGL-t igényel, amit úgy néz ki viszont, hogy az eszközöd nem támogat. Ez sokszor csak egy ideiglenesen fellépő gond, ami a géped újraindításával megszüntethető.", + "tw.browserModal.webglBrowser": "Használd a Chrome, Firefox vagy Safari egy friss verzióját és győződj meg róla, hogy a grafikus meghajtók naprakészek. Megpróbálhatod a \"grafikus gyorsítás\" vagy a \"hardveres gyorsítás\" lehetőséget a böngésződ beállításai közt.", + "tw.browserModal.webglDesktop": "Megpróbálhatod átkapcsolni a \"grafikus gyorsítás\" opciót az asztali beállításokban:", + "tw.cantUseCloud": "Noha képes vagy megosztott változókat létrehozni, nem fognak működni, amíg ez a projekt fel nem töltődik a Scratchre vagy nem kerül sor olyan eszközök használatára, mint a {packager}.", "tw.changeUsername.cannotChangeWhileRunning": "A felhasználónév nem változtatható meg a projekt futása alatt.", "tw.clipboard.danger": "Ha a vágolapod olyan dolgokat, mint jelszavakat tartalmaz, a projekt esetleg megoszthatja másik felhasználókkal vagy szerverekkel.", + "tw.clipboard.permission": "A vágólaphoz való hozzáférés, elképzelhető, hogy nem lesz minden böngészőben elérhető. Ha egyszer engedélyezett, későbbi vágólap-olvasások is akadály nélkül megtörténhetnek.", "tw.clipboard.title": "Ez a projekt szeretné a vágólapról adatot olvasni.", + "tw.cloudProvider": "A szervert közzéteszi: {name}.", "tw.cloudServers": "Válassz egy nálad közeli lévő szervert:", "tw.code": "Forráskód", "tw.confirmIncompatibleExtension": "Ez a kiegészítés nem kompatibilis a Scratchhel. Ezzel készített projekteket nem lehet feltölteni a Scratch weboldalára. Biztos, hogy mégis engedélyezni szeretnéd őket?", @@ -1158,55 +1324,90 @@ "tw.customExtension.name": "Egyéni bővítmény", "tw.customExtensionModal.file": "Fájlok", "tw.customExtensionModal.load": "Betöltés", + "tw.customExtensionModal.promptFile": "Jelölj ki vagy húzz ide bővítmények JavaScript fájlját:", + "tw.customExtensionModal.promptText": "Illeszd be a bővítmény JavaScript forráskódját:", + "tw.customExtensionModal.promptURL": "Add meg a bővítmény URL-jét:", "tw.customExtensionModal.text": "Szöveg", "tw.customExtensionModal.title": "Egyéni bővitmény betöltése", - "tw.customExtensionModal.unsandboxed": "Futtatás a homokozó nélkül", + "tw.customExtensionModal.trusted": "Ez a bővítmény homokozó nélkül fog betöltődni, mivel egy megbízható forrásból származik.", + "tw.customExtensionModal.unsandboxed": "Futtatás homokozó használata nélkül", + "tw.customExtensionModal.unsandboxedWarning1": "A bővítmény betöltése homokozó nélkül veszélyes és nem érdemes megpróbálni, ha nem tudod pontosan, mit csinálsz.", + "tw.customExtensionModal.unsandboxedWarning2": "A homokozóban nem futtatott bővítmények elronthatják a projektedet, kitörölhetik a beállításaidat, elhalászhatják jelszóidat és más rossz dolgokat is tehetnek. A {APP_NAME} fejlesztői nem felelősek semmilyen okozott kellemetlenségért.", + "tw.customExtensionModal.untrusted": "Megbízhatatlan URL-ekből származó bővítmények mindig homokozó használatával kerülnek betöltésre a biztonság érdekében.", + "tw.customReporters.description": "Lehetővé teszi a saját blokkoknak, hogy értékeket adjanak vissza és, hogy bemenetként lehessen használni.", + "tw.customReporters.name": "Saját értékblokkok", "tw.darkMode": "Átváltás világos módra", + "tw.desktopCloud": "Az asztali alkalmazásban a megosztott változók szinkronizálódnak minden e gépen levő ablak között. Töltsd fel a projektet Scratchre, vagy használj egy olyan eszközt mint a {packager}, hogy a felhőben is szinkronizálva legyenek.", "tw.documentation": "Dokumentáció", "tw.download.danger": "Ez a fájl nem lett átvizsgálva a {APP_NAME} fejlesztői által.", "tw.download.executable": "Ez egy futattható fájl formátum ami lehet, hogy rosszindulatú kódot tartalmazhat, ha futtatod.", "tw.download.file": "A projekt fájlt akar letölteni a számítógépedre. {name} néven lesz mentve a letöltés-mappádba.", + "tw.embed.persistent": "Engedélyezés esetén a későbbi beágyazások ugyanehhez a weboldalhoz automatikusan el lesznek fogadva.", + "tw.embed.risks": "Noha a beágyazandó tartalom homokozóban kerül futtatásra először, továbbra is hozzáférhet információkhoz az eszközödről, mint amilyen az IP-címed és a megközelítő tartózkodási helyed is.", + "tw.embed.title1": "A projekt HTML-tartalmat szeretne a színpadra illeszteni.", + "tw.embed.title2": "A projekt távoli tartalmat szeretne a színpadra illeszteni.", + "tw.extensionGallery.error": "Hiba lépett fel a bővítménykönyvtár betöltésekor. Látogasd meg az extension.turbowarp.org-ot több bővítmény felleléséhez.", "tw.extensionGallery.loading": "Bövítménygaléria betöltése...", "tw.extensionGallery.more": "Tudj többet a bővítményekről a extensions.turbowarp.org weboldalon.", "tw.extensionGallery.name": "{APP_NAME}-bövítménygaléria", + "tw.favorite": "Kedvencként jelölés", "tw.featuredProjectsStudio": "Műhely megtekintése a Scratchen.", "tw.feedback": "Visszajelzés és hibák", - "tw.feedbackButton": "{APP_NAME}-visszajelzés", + "tw.feedbackButton": "Visszajelzés a {APP_NAME}-ról", + "tw.fetch.title": "A projekt csatlakozni szeretne a következő weboldalhoz:", "tw.fileInput.none": "Nincsenek kiválasztva fájlok.", "tw.fileInput.selected": "Kiválasztva: {names}", "tw.fonts.add": "Hozzáadás", "tw.fonts.custom.file": "Válassz egy betűkészletfájlot a számítógépedről:", "tw.fonts.custom.name": "Adj a betűtípusnak egy nevet:", "tw.fonts.custom1": "Betűtípus hozzáadása fájlból", + "tw.fonts.custom2": "Általában nem fog működni a Scratchen. Támogatott formátumok: {formats}.", + "tw.fonts.delete": "Biztos, hogy ki szeretnéd törölni a következő betűtípust: „{font}”? Minden vektoros jelmez a tartalék-betűtípust fogja helyette használni.", + "tw.fonts.fallback": "Válassz ki egy tartalék-betűtípust, ha a betűtípust nem sikerül betölteni vagy már ki lett törölve:", "tw.fonts.list": "Telepített betűtípusok:", "tw.fonts.none": "Még nincs betűtípus hozzáadva.", + "tw.fonts.readError": "Nem sikerült beolvasni a betűtípus-fájlt: {error}", "tw.fonts.system": "Rendszerbetűtípus", + "tw.fonts.system.name": "Írd be a nevét bármilyen számítógépeden megtalálható betűtípusnak. A betűtípus nem biztos, hogy mindenkinek megfelelő módon fog megjelenni.", "tw.fonts.system1": "Rendszerbetűtípus hozzáadása", "tw.fonts.system2": "Működhet a Scratch-ben, de nem fog mindenkinek helyesen megjelenni.", "tw.fonts.title": "Betűtípusok", "tw.footer.credits": "Stáblista", + "tw.footer.disclaimer": "A {APP_NAME} nem áll hivatalos kapcsolatban a Scratch-vel, a Scratch Csapattal vagy a Scratch Alapítvánnyal.", "tw.footer.documentation": "Dokumentáció", - "tw.footer.donate": "Adományozz", "tw.footer.embed": "Beágyazás", "tw.footer.parameters": "URL paraméterek", + "tw.footer.scratchDisclaimer": "A Scratch a Scratch Alapítvány egy projektje, ami elérhető {scratchDotOrg} ingyenesen.", + "tw.geolocate.permission": "Amennyiben elfogadod, lehet hogy a böngésző által is meg leszel kérve a helyadatokhoz való hozzáférés engedélyezéséhez.", + "tw.geolocate.title": "A projekt hozzá szeretne férni a tartózkodási helyedhez.", "tw.gui.crashMessage.description": "Nagyon sajnáljuk, de úgy tűnik, hogy a projekt összeomlott. Kérjük frissítsd az oldalt, és próbáld újra.", "tw.gui.defaultProjectTitle": "Projekt", "tw.guiDefaultTitle": "Scratch projektek futtatása gyorsabban", "tw.home.credit": "Megjegyzések és stáblista", - "tw.home.description": "A {APP_NAME} egy Scratch-modifikáció, ami átfordítja a projekteket JavaScriptbe, így igazán gyorsan lefuttatva őket. Próbálja ki egy projekt azonosítójával (ID), vagy URL-jével a fenti mezőbe beillesztve, illetve egy kiemelt projekt választásával lentről.", + "tw.home.description": "A {APP_NAME} egy Scratch-modifikáció, ami átfordítja a projekteket JavaScriptbe, így igazán gyorsan lefuttatva őket. Próbáld ki egy projekt azonosítójának (ID) vagy URL-jének a fenti mezőbe történő beillesztésével, illetve egy kiemelt projekt választásával lentről.", "tw.home.instructions": "Utasítások", "tw.input.tooltip": "Másolj, majd illessz be Scratch-projekt linkeket ide!", "tw.interpolationEnabled": "Interpoláció", "tw.invalidParameters.clones": "A \"clone\" URL paraméter érvénytelen", "tw.invalidParameters.fps": "Az \"fps\" URL paraméter érvénytelen", + "tw.invalidProject.error": "Nem sikerült betölteni a projektet.", + "tw.invalidProject.options": "Lehet, hogy vissza tudod tölteni egy korábbi verzióját a projektnek egy automatikus vagy másmilyen biztonsági mentésből.", + "tw.invalidProject.reportIt": "jelentsd", + "tw.invalidProject.restorePoints": "Biztonsági mentések megtekintése", "tw.invalidProject.title": "Hiba", + "tw.invalidProject.validationError": "Ez a hiba gyakran azt jelenti, hogy egy kis része a projektnek megsérült, de máskülönben szabályos. Ebben az esetben könnyen megjavítható a hiba, így kérlek {reportIt}.", "tw.lightMode": "Átváltás sötét módra", - "tw.loadExtension.unsandboxed": "Futtatás a homokozó nélkül", + "tw.loadExtension.embedded": "A projekt be szeretne tölteni egy egyedi bővítményt a következő kóddal:", + "tw.loadExtension.sandboxed": "A kódnak a homokozóban történő futása közben továbbra is alkalma lesz hozzáférni információkhoz az eszközödről, mint például az IP-címedhez, vagy a körülbelüli tartózkodási helyedhez. Győződj meg róla a továbblépés előtt, hogy bízol-e a bővítmény készítőiben.", + "tw.loadExtension.unsandboxed": "Futtatás homokozó használata nélkül", + "tw.loadExtension.unsandboxedWarning": "Bővítmények betöltése homokozó nélkül veszélyes. Elronthatják a projektedet, kitörölhetik a beállításaidat, elhalászhatják jelszóidat és más rossz dolgokat is tehetnek. A {APP_NAME} fejlesztői nem felelősek semmilyen okozott kellemetlenségért.", + "tw.loadExtension.url": "A projekt be szeretne tölteni egy egyedi bővítményt a következő URL-ből:", "tw.loader.downloadingAssets": "Tartozékok letöltése ({complete}/{total}) …", "tw.loader.loadingAssets": "Tartozékok betöltése ({complete}/{total}) …", "tw.loader.projectData": "Projekt betöltése ...", "tw.menuBar.60off": "60 FPS mód kikapcsolása", "tw.menuBar.60on": "60 FPS mód bekapcsolása", + "tw.menuBar.accent": "Kiemelés", "tw.menuBar.addons": "Kiegészítők", "tw.menuBar.advanced": "Haladó", "tw.menuBar.blockColors": "Blokk-színek", @@ -1220,40 +1421,66 @@ "tw.menuBar.newFramerate": "Új képkockaarány:", "tw.menuBar.newWindow": "Új ablak", "tw.menuBar.package": "Projekt csomagolása", + "tw.menuBar.reportError1": "Néhány szkript hibákat észlelt.", "tw.menuBar.reportError2": "Ez egy hiba. Kérjük jelentsd.", "tw.menuBar.restorePoints": "Helyreállítási pontok", "tw.menuBar.saveAs": "Mentés {file}-ként", "tw.menuBar.seeInside": "Megnézem belülről", "tw.mono": "Monó", + "tw.moreCloud": "Megosztott változókról több megtudása.", + "tw.notify.permission": "Amennyiben engedélyezed, lehet hogy a böngésződ megkér, hogy hagyd jóvá az értesítések megjelenítését, s akkor további értesítések már automatikusan engedélyezve lesznek.", + "tw.notify.title": "A projekt értesítéseket szeretne megjeleníteni.", "tw.oldDownload": "Mentés más fájlba...", "tw.opcode.2000": "napok 2000 óta", "tw.opcode.mousedown": "egér lenyomva?", "tw.opcode.mousex": "egér x", "tw.opcode.mousey": "egér y", "tw.openAdvanced": "Haladó beállítások megnyitása", + "tw.openWindow.dangerous": "Ez a weboldal nem került ellenőrzésre a {APP_NAME} fejlesztői által. Veszélyes vagy rossz szándékú kódot is tartalmazhat.", + "tw.openWindow.title": "A projekt egy új ablakot vagy lapot szeretne megnyitni az alábbi URL-lel:", "tw.paint.alpha": "Áttetszőség", "tw.paint.fonts.more": "Betűtípusok hozzáadása...", + "tw.pen.stageSelected": "A színpad van kiválasztva: kevesebb tollblokk", "tw.privacy": "Adatvédelmi Irányelvek", + "tw.recordAudio.permission": "Amennyiben engedélyezed, lehet hogy a böngésződ megkér, hogy hagyd jóvá a mikrofonhoz való hozzáférést, s akkor további felvételek a mikrofonnal már automatikusan engedélyezve lesznek.", + "tw.recordAudio.title": "A projekt hangot szeretne rögzíteni a mikrofonoddal. Ez magába foglalhatja egy szöveg felolvasását vagy nyers hanganyagot. A projekt lehet, hogy képes megosztani hangfájlokat más felhasználókkal vagy szerverekkel.", + "tw.recordVideo.permission": "Amennyiben engedélyezed, lehet hogy a böngésződ megkér, hogy hagyd jóvá a kamerádhoz való hozzáférést, s akkor további felvételek a kamerával már automatikusan engedélyezve lesznek.", + "tw.recordVideo.title": "A projekt videót szeretne rögzíteni a kamera segítségével. A projekt lehet, hogy képes megosztani képeket más felhasználókkal vagy szerverekkel.", + "tw.redirect.dangerous": "Ez a weboldal nem került ellenőrzésre a {APP_NAME} fejlesztői által. Veszélyes vagy rossz szándékú kódot is tartalmazhat.", + "tw.redirect.title": "A projekt a következő URL-hez szeretné irányítani ezt a lapot:", + "tw.removedTrademarks": "Néhány elem elkerült innen, amely tartalmazott Scratch védjegyet.", "tw.restorePoints.1minute": "percenként", "tw.restorePoints.assets": "{n} tartozék", + "tw.restorePoints.confirmDelete": "Biztos, ki szeretnéd törölni ezt a mentést: „{projectTitle}”? Nem vonható vissza a törlés.", + "tw.restorePoints.confirmDeleteAll": "Biztos, hogy MINDEN biztonsági mentést törölni szeretnél? Nem csinálhatod vissza később.", + "tw.restorePoints.confirmLoad": "Mentetlen változtatásaid vannak. Le szeretnéd cserélni a projektet mégis?", "tw.restorePoints.deleteAll": "Összes törlése", + "tw.restorePoints.description": "A {APP_NAME} időközönként helyreállítási pontokat készít a számtógépeden annak érdekében, hogy könnyebben visszanyerd projektedet abban az esetben, ha elfelejtenél menteni. Azonban a számítógéped szó nélkül ki törölheti ezeket a helyreállítási pontokat bármikor. NE támaszkodj csak erre a funkcióra.", "tw.restorePoints.empty": "Nincsenek helyreállítási pontok.", + "tw.restorePoints.error": "Hiba a helyreállítási pont betöltése közben: {error}", + "tw.restorePoints.exportError": "Hiba a biztonsági mentés exportálása közben: {error}", "tw.restorePoints.intervalOption": "Helyreállítási pontok {time}vannak készítve.", "tw.restorePoints.loading": "Betöltés...", "tw.restorePoints.minutes": "{n} percenként", "tw.restorePoints.never": "soha", "tw.restorePoints.off": "A helyreállítási pontok letiltása veszélyes.", "tw.restorePoints.size": "Becsült használt tárhely: {size}", + "tw.restorePoints.size2": "Több helyreállítási pont által is használt jelmezek és hangokat csak egyszer vannak tárolva.", "tw.restorePoints.title": "Helyreállítási pontok", + "tw.sample": "Mintaprojekt", "tw.saveAs": "Mentés másként...", "tw.saveTo": "Mentés ide: {file}", + "tw.scratchUnsafeCloud": "Ha létrehozod ezt a megosztott változót, a projekt túllépi a Scratch {number}-es változólimitjét, amik közül néhány nem fog működni, ha feltöltöd a projektet Scratchre.", "tw.securityManager.allow": "Engedélyezés", "tw.securityManager.deny": "Tagadás", "tw.securityManager.title": "Bővítmény-biztonság", + "tw.securityManager.trust": "Engedélyezés esetén a későbbi kérelmek ugyanehhez a weboldalhoz automatikusan el lesznek fogadva.", + "tw.securityManager.why": "Képek vagy hangok letöltéséhez, többjátékos mód kivitelezéséhez, APIk eléréséhez vagy esetleg rosszindulatú célokra használható. Meg fogja osztani az IP-címedet, megközelítő tartózkodási helyedet és esetlegesen még más adatokat is a weboldallal.", "tw.settingsModal.customStageSize": "Egyedi színpadméret:", "tw.settingsModal.customStageSizeHelp": "Megváltoztatja a méretét a Scratch színpadnak 480×360-ról valami másra. Próbálja ki a 640×360-t, hogy a színpad képernyő méretű legyen. Csak nagyon kevés projekt kezeli ezt megfelelően.", "tw.settingsModal.dangerZone": "Veszélyzóna", - "tw.settingsModal.disableCompiler": "Fordítóprogram kikapcsolása", + "tw.settingsModal.disableCompiler": "Fordítóprogram mellőzése", + "tw.settingsModal.disableCompilerHelp": "Kikapcsolja a {APP_NAME} fordítóprogramját. Projektek szerkesztése közben elképzelhető, hogy szükséged lehet rá a szkriptek azonnali frissítése végett. Egyéb helyzetekben sose pipáld be ezt a lehetőséget!", "tw.settingsModal.featured": "Kiemelt", "tw.settingsModal.fps": "60 FPS (Egyéni FPS)", "tw.settingsModal.fpsHelp": "Az utasításokat 30 helyett 60-szor futtatja le másodpercenként. A legtöbb projekt nem fog megfelelően működni ezzel. Ki kell próbálnod az Interpolációt 60 FPS nélkül, ha ez a helyzet. {customFramerate}.", @@ -1276,14 +1503,26 @@ "tw.settingsModal.title": "Haladó Beállítások", "tw.settingsModal.warpTimer": "Warp Időzítő", "tw.settingsModal.warpTimerHelp": "Leellenőrzi a szkripteket, hogy nem-e ragadtak bele egy hosszú- vagy végtelen-ciklusba, és alacsony képkockaarányban futtatja őket, ahelyett hogy leragadjanak, amíg a ciklus véget ér. Ez tehát megjavítja a legtöbb összeomlást, de cserébe van egy jelentős teljesítménybehatása is, így csak a szerkesztőben van automatikusan bekapcsolva.", + "tw.soundEditorNotSupported": "A hangszerkesztő nincs támogatva ebben a böngészőben", "tw.spriteSelectorItem.rename": "átnevezés", "tw.stageHeader.full": "Váltás teljes színpadra", "tw.stereo": "Sztereó", + "tw.stereoAlert": "Ennek a sztereóhangfájlnak a szerkesztésekor visszavonhatatlanul monóvá fogja azt alakítani.", "tw.studioview.authorAttribution": "{author} által", "tw.studioview.error": "Hiba történt a projektek következő oldalának betöltése közben.", "tw.studioview.hoverText": "{title}, {author} által", + "tw.tooLarge": "Ez a hang túl nagy lehet ahhoz, hogy a Scratchre kerülhessen.", "tw.twExtension.description": "Furcsa új blokkok.", "tw.twExtension.name": "{APP_NAME}-blokkok ", + "tw.unfavorite": "Kedvencként jelölés eltávolítása", + "tw.unknownPlatform.1": "A projekt egy másik felület számára készült:", + "tw.unknownPlatform.2": "A {APP_NAME}-val való kompatibilitás nem biztosított. Továbbléphetsz saját felelősségre, de nem feltétlen tudunk segíteni ha nehézségek lépnek fel a használat során.", + "tw.unknownPlatform.continue": "Megértettem", + "tw.unknownPlatform.title": "Ismeretlen felület", + "tw.unshared.2": "Több információért látogass el ide: {link}", + "tw.unshared.bug": "Ha ez a projekt igazából meg van osztva, kérjük jelentsd ezt a hibát nekünk.", + "tw.unshared.cache": "Ha a projekt nemrég került megosztásra, ez az üzenet pár percig helytelenül jelenhet meg.", + "tw.unshared2.1": "A nem megosztott projektek többé nem érhetőek el.", "tw.usernameModal.help": "Ez az érték a böngésződ tárában fog eltárolódni. Lehet, hogy naplózva lesz amikor olyan projektekkel lépsz kapcsolatba, amik tartalmaznak megosztott változókat.", "tw.usernameModal.help2": "Olyan értékeket, amik nem egyeznek meg egy érvényes Scratch fiókkal sem, a megosztott változók szervere elutasít jellemzően. Azt javasoljuk, hogy hagyd, ahogy van, vagy állítsd a Scratch felhasználónevedre.", "tw.usernameModal.mustChange": "Bocsánat, a megosztott változók szervere szerint a felhasználóneved nem lehet föltétlenül biztonságos. Kérjük változtasd meg valami másra, vagy {resetIt}.", @@ -1362,9 +1601,11 @@ "tw.download.executable": "Il file è in formato eseguibile. Se lo esegui tieni conto del fatto che potrebbe trattarsi di un malware.", "tw.download.file": "Il progetto sta scaricando un file sul tuo computer. Sarà salvato come {name} nella cartella Download.", "tw.embed.persistent": "Nel caso l'inserimento venga consentito, futuri tentativi di inserimento di contenuti provenienti dallo stesso sito saranno automaticamente consentiti.", - "tw.embed.risks": "Anche se il contenuto sarà inserito in una sandbox, avrà comunque accesso alle informazioni sul tuo dispotivo come il tuo indirizzo IP e la tua posizione.", + "tw.embed.risks": "Anche se il contenuto sarà inserito in una sandbox, avrà comunque accesso alle informazioni sul tuo dispositivo come il tuo indirizzo IP e la tua posizione.", "tw.embed.title1": "Il progetto sta cercando di inserire del contenuto HTML sopra allo Stage:", "tw.embed.title2": "Il progetto sta cercando di inserire contenuto remoto sopra allo Stage:", + "tw.extension.faceSensing.description": "Rileva i movimenti del volto usando la webcam.", + "tw.extension.faceSensing.name": "Sensore del Volto", "tw.extensionGallery.error": "Errore nel caricamento della galleria delle estensioni. Visita extensions.turbowarp.org per ulteriori informazioni sulle estensioni.", "tw.extensionGallery.loading": "Caricamento galleria estensioni in corso...", "tw.extensionGallery.more": "Ulteriori informazioni sulle estensioni disponibili a extensions.turbowarp.org.", @@ -1394,7 +1635,6 @@ "tw.footer.credits": "Crediti", "tw.footer.disclaimer": "{APP_NAME} non è affiliato con Scratch, lo Scratch Team o la Scratch Foundation.", "tw.footer.documentation": "Documentazione", - "tw.footer.donate": "Dona", "tw.footer.embed": "Inclusione", "tw.footer.parameters": "Parametri URL", "tw.footer.scratchDisclaimer": "Scratch è un progetto della Scratch Foundation. E’ disponibile gratuitamentesul sito {scratchDotOrg}.", @@ -1579,6 +1819,11 @@ "tw.blocks.mouseButton.primary": "(0) 左ボタン", "tw.blocks.mouseButton.secondary": "(2) 右ボタン", "tw.blocks.openDocs": "ドキュメントを開く", + "tw.browserModal.desktopSettings": "デスクトップの設定を開く", + "tw.browserModal.desktopTitle": "システムはサポートされていません", + "tw.browserModal.webgl1": "{APP_NAME}はWebGLを必要としますが、お使いのパソコンはWebGLをサポートしていないようです。これは一時的なエラーであることが多く、コンピュータを再起動することで解決できる場合があります。", + "tw.browserModal.webglBrowser": "Chrome、Firefox、またはSafariの最新バージョンを使って、グラフィックドライバーが最新であることを確認してください。ブラウザの設定で「グラフィックアクセラレーション」または「ハードウェアアクセラレーション」の項目を切り替えてみることもできます。", + "tw.browserModal.webglDesktop": "デスクトップの設定で「グラフィックアクセラレーション」の項目を切り替えてみることもできます。", "tw.cantUseCloud": "クラウド変数を作成することはできますが、このプロジェクトをScratchにアップロードするか、{packager}などのツールを使用しないと、動作しません。", "tw.changeUsername.cannotChangeWhileRunning": "ユーザー名をプロジェクトの実行中に変えることはできません。", "tw.clipboard.danger": "クリップボードにパスワードなどが含まれている場合、プロジェクトが他のユーザーや、サーバーに共有してしまう可能性があります。", @@ -1609,9 +1854,9 @@ "tw.darkMode": "ライトモードに切り替える", "tw.desktopCloud": "デスクトップアプリでは、クラウド変数はこのコンピューター上のすべてのデスクトップアプリのウィンドウ間で同期されます。プロジェクトをScratchにアップロードするか、{packager}などのツールを使用してグローバルに同期してください。", "tw.documentation": "ドキュメント", - "tw.download.danger": "このファイルは未だ{APP_NAME}の開発者に審査されていません。", - "tw.download.executable": "このファイルは実行ファイルであります。実行すると、あなたのコンピュータに危害を加える恐れがあります。", - "tw.download.file": "プロジェクトはコンピューターにファイルをダウンロードしようとしています。ファイルはあなたのダウンロードフォルダーに{name}として保存されます。", + "tw.download.danger": "このファイルはまだ{APP_NAME}の開発者によって審査されていません。", + "tw.download.executable": "このファイルは実行可能ファイルです。実行すると、あなたのコンピュータに危害を加える恐れがあります。", + "tw.download.file": "プロジェクトがコンピューターにファイルをダウンロードしようとしています。ファイルはあなたのダウンロードフォルダーに{name}として保存されます。", "tw.embed.persistent": "許可した場合、同じサイトから読み込まれる埋め込みは、自動的に許可されます。", "tw.embed.risks": "埋め込まれるコンテンツはサンドボックス化されますが、IPアドレスや、位置情報といった端末情報にはまだアクセスすることができます。", "tw.embed.title1": "プロジェクトはHTMLコンテンツをステージに埋め込もうとしています:", @@ -1645,7 +1890,6 @@ "tw.footer.credits": "クレジット", "tw.footer.disclaimer": "{APP_NAME}は、Scratch、Scratchチームおよび、Scratch財団と提携していません。", "tw.footer.documentation": "ドキュメント", - "tw.footer.donate": "寄付する", "tw.footer.embed": "埋め込みコード", "tw.footer.parameters": "URLパラメーター", "tw.footer.scratchDisclaimer": "Scratchは、Scratch財団のプロジェクトです。{scratchDotOrg}で無料で利用できます。", @@ -1728,6 +1972,7 @@ "tw.restorePoints.description": "{APP_NAME}は、保存を忘れた場合にプロジェクトを回復できるように、復元ポイントをコンピュータに定期的に保存します。これは復元のための最後の手段として意図されています。これらの復元ポイントは削除される可能性があります。できるだけこの機能に依存しないでください。", "tw.restorePoints.empty": "復元ポイントはありません。", "tw.restorePoints.error": "復元ポイントを読み込み中のエラー:{error}", + "tw.restorePoints.exportError": "復元ポイントのエクスポート中にエラーが発生しました:{error}", "tw.restorePoints.intervalOption": "{time}に復元ポイントを作る", "tw.restorePoints.loading": "読み込み中…", "tw.restorePoints.minutes": "{n}分ごと", @@ -1782,7 +2027,8 @@ "tw.twExtension.description": "不思議な新しいブロック", "tw.twExtension.name": "{APP_NAME}ブロック", "tw.unfavorite": "お気に入りを外す", - "tw.unknownPlatform.2": "{APP_NAME}との互換性はありません。リスクがあることを理解した上で、続けることはできますが、不具合が発生した場合、私たちは対応できない場合があります。", + "tw.unknownPlatform.1": "このプロジェクトは別のプラットフォーム向けに作成されました:", + "tw.unknownPlatform.2": "{APP_NAME}との互換性はありません。リスクがあることを理解した上で、続けることはできますが、不具合が発生した場合、サポートを受けられない場合があります。", "tw.unknownPlatform.continue": "理解しました", "tw.unknownPlatform.title": "不明なプラットフォーム", "tw.unshared.2": "詳しくはこちらをご覧ください: {link}", @@ -1819,7 +2065,6 @@ "tw.featuredProjectsStudio": "Scratchのスタジオでみる。", "tw.feedback": "フィードバックとバグ", "tw.footer.credits": "クレジット", - "tw.footer.donate": "きふをする", "tw.footer.embed": "うめこみコード", "tw.footer.parameters": "URLパラメーター", "tw.gui.crashMessage.description": "もうしわけありませんが、ページがクラッシュしたようです。ページをもういちどよみこんでください。", @@ -1918,6 +2163,7 @@ "tw.blocks.mouseButton.primary": "(0) 왼쪽", "tw.blocks.mouseButton.secondary": "(2) 오른쪽", "tw.blocks.openDocs": "문서 열기", + "tw.browserModal.desktopSettings": "데스크톱 설정 열기", "tw.cantUseCloud": "클라우드 변수를 생성할 수는 있으나, 해당 프로젝트가 Scratch에 업로드 하거나, {packager}와 같은 도구를 통해 변환하지 않는 한 클라우드 변수는 작동하지 않습니다.", "tw.changeUsername.cannotChangeWhileRunning": "'사용자 이름'은 프로젝트가 실행되는 동안 변경할 수 없습니다.", "tw.clipboard.danger": "클립보드에 비밀번호와 같은 민감한 정보가 포함되어 있을 경우, 프로젝트에 의해 해당 정보가 다른 사용자 또는 서버와 공유될 수 있습니다.", @@ -1955,6 +2201,8 @@ "tw.embed.risks": "임베디드 콘텐츠는 샌드박스되지만, 여전히 사용자 기기의 IP 주소 또는 위치 정보와 같은 기기 정보에 접근할 수 있습니다.", "tw.embed.title1": "프로젝트가 무대에 HTML 콘텐츠를 표시하려고 합니다 :", "tw.embed.title2": "프로젝트가 무대에 원격 콘텐츠를 표시하려고 합니다 :", + "tw.extension.faceSensing.description": "카메라로 안면을 인식합니다.", + "tw.extension.faceSensing.name": "얼굴 인식", "tw.extensionGallery.error": "확장 기능 갤러리를 불러오는 중 문제가 발생했습니다. extensions.turbowarp.org 에서 더 많은 확장 기능을 찾아보세요.", "tw.extensionGallery.loading": "확장 기능 갤러리를 불러오는 중...", "tw.extensionGallery.more": "extensions.turbowarp.org 에서 확장 기능에 대해 자세히 알아보기", @@ -1984,7 +2232,6 @@ "tw.footer.credits": "도움을 준 사람들", "tw.footer.disclaimer": "{APP_NAME}은(는) 스크래치, 스크래치 팀, 스크래치 재단에 소속되어 있지 않습니다.", "tw.footer.documentation": "문서", - "tw.footer.donate": "기부", "tw.footer.embed": "임베딩", "tw.footer.parameters": "URL 파라미터", "tw.footer.scratchDisclaimer": "스크래치는 스크래치 재단의 프로젝트입니다. {scratchDotOrg} 에서 무료로 사용 가능합니다.", @@ -2068,6 +2315,7 @@ "tw.restorePoints.description": "{APP_NAME}에서는 사용자가 프로젝트를 저장하지 않고 종료할 시를 대비해 주기적으로 복원 지점을 생성합니다.\n해당 기능은 프로젝트를 복구하기 위한 최후의 수단입니다. 저장된 복원 지점은 언제든지 기기의 시스템에 의해 자동으로 삭제될 수 있으므로 절대로 해당 기능에 의존하지 마십시오.", "tw.restorePoints.empty": "복원 지점을 찾을 수 없습니다.", "tw.restorePoints.error": "복원 지점을 불러오는 중 문제가 발생했습니다 : {error}", + "tw.restorePoints.exportError": "복원 지점 내보내기 중 오류가 발생했습니다: {error}", "tw.restorePoints.intervalOption": "복원 지점이 {time} 간격으로 생성됩니다.", "tw.restorePoints.loading": "불러오는 중...", "tw.restorePoints.minutes": "{n}분", @@ -2124,6 +2372,7 @@ "tw.twExtension.description": "이상하고 새로운 블록들입니다.", "tw.twExtension.name": "{APP_NAME} 블록", "tw.unfavorite": "즐겨찾기 해제", + "tw.unknownPlatform.1": "프로젝트가 다른 플랫폼에서 만들어졌습니다:", "tw.unknownPlatform.2": "{APP_NAME}와(과) 호환되지 않습니다. 위험을 감수하고 진행할 수 있으나, 이후 발생하는 어떠한 문제에도 지원을 받을 수 없습니다.", "tw.unknownPlatform.continue": "이해했습니다", "tw.unknownPlatform.title": "알 수 없는 플랫폼", @@ -2141,7 +2390,7 @@ "tw.usesCloudVariables": "해당 프로젝트는 클라우드 변수를 사용합니다.", "tw.usesCloudVariables2": "{APP_NAME} 프로젝트의 클라우드 변수가 스크래치 서버에 연결되지 않았습니다. 모든 사용자가 {changeTheirUsername}을 다른 사용자 이름으로 변경할 수 있으므로 사칭에 주의해야 합니다.", "tw.usesCloudVariables2.change": "자기 자신의 사용자 이름", - "tw.viewFeaturedProjects": "여기를 클릭하여 특집 프로젝트를 볼 수 있습니다.", + "tw.viewFeaturedProjects": "클릭하여 특집 프로젝트 보기", "tw.viewOnScratch": "스크래치에서 프로젝트 보기" }, "lt": { @@ -2163,7 +2412,6 @@ "tw.featuredProjectsStudio": "Peržiurėti studiją per Scratch.", "tw.feedback": "Atsiliepimai ir Klaidos", "tw.footer.credits": "Padėkos", - "tw.footer.donate": "Paaukoti", "tw.footer.embed": "Įterpimas", "tw.footer.parameters": "URL Parametrai", "tw.gui.crashMessage.description": "Labai atsiprašome, bet atrodo, kad puslapis užstrigo. Prašome perkrauti puslapį ir pabandyti dar kartą.", @@ -2324,7 +2572,6 @@ "tw.fonts.title": "Skrifter", "tw.footer.credits": "Kreditter", "tw.footer.documentation": "Dokumentasjon", - "tw.footer.donate": "Doner", "tw.footer.embed": "Innebygging", "tw.footer.parameters": "URL-parametere", "tw.geolocate.permission": "Hvis tillatt, kan du bli bedt om å tillate stedstilgang av nettleseren din.", @@ -2561,7 +2808,6 @@ "tw.fonts.title": "Lettertypen", "tw.footer.disclaimer": "{APP_NAME} is niet aangesloten bij Scratch, het Scratch Team of de Scratch Foundation.", "tw.footer.documentation": "Documentatie", - "tw.footer.donate": "Doneren", "tw.footer.embed": "Invoeging", "tw.footer.parameters": "URL-Parameters", "tw.footer.scratchDisclaimer": "Scratch is een project van de Scratch Foundation en is gratis verkrijgbaar op {scratchDotOrg}.", @@ -2740,7 +2986,6 @@ "tw.fetch.title": "Projekt chce połączyć się z:", "tw.footer.credits": "Podziękowania", "tw.footer.documentation": "Dokumentacja", - "tw.footer.donate": "Wesprzyj", "tw.footer.embed": "Osadzanie", "tw.footer.parameters": "Parametry URL", "tw.gui.defaultProjectTitle": "Projekt", @@ -2966,7 +3211,6 @@ "tw.fonts.title": "Fontes", "tw.footer.credits": "Créditos", "tw.footer.documentation": "Documentação", - "tw.footer.donate": "Doar", "tw.footer.embed": "Incorporação", "tw.footer.parameters": "Parâmetros de URL", "tw.gui.crashMessage.description": "Lamentamos, mas parece que a página parou de funcionar. Por favor, renicie-a para tentar novamente.", @@ -3160,6 +3404,11 @@ "tw.blocks.mouseButton.primary": "(0) основная", "tw.blocks.mouseButton.secondary": "(2) дополнительная", "tw.blocks.openDocs": "Открыть Документацию", + "tw.browserModal.desktopSettings": "Открыть Настройки Рабочего стола", + "tw.browserModal.desktopTitle": "Система не поддерживается", + "tw.browserModal.webgl1": " {APP_NAME} требует WebGL, однако ваш компьютер, похоже, не поддерживает его. Часто это временная ошибка, которую можно устранить, перезагрузив компьютер.", + "tw.browserModal.webglBrowser": "Используйте последнюю версию Chrome, Firefox или Safari и убедитесь, что ваши графические драйверы обновлены. Вы также можете попробовать включить опцию \"графическое ускорение\" или \"аппаратное ускорение\" в настройках браузера.", + "tw.browserModal.webglDesktop": "Вы также можете попробовать включить опцию \"ускорение графики\" в настройках рабочего стола:", "tw.cantUseCloud": "Хотя вы можете создавать облачные переменные, они не будут работать до тех пор, пока проект не будет загружен в Scratch или преобразован с помощью такого инструмента, как {packager}.", "tw.changeUsername.cannotChangeWhileRunning": "Имя пользователя не может быть изменено, пока проект запущен.", "tw.clipboard.danger": "Если ваш Буфер Обмена содержит такие штуки как пароли, проект сможет иметь к ним доступ чтобы поделиться с другими пользователями или серверами.", @@ -3198,6 +3447,8 @@ "tw.embed.risks": "Хотя встраиваемое приложение будет изолировано, оно по-прежнему будет иметь доступ к информации о вашем устройстве, такой как ваш IP-адрес и общее местоположение.", "tw.embed.title1": "Проект хочет вставить HTML контент поверх всей сцены:", "tw.embed.title2": "Проект хочет вставить удаленный контент поверх всей сцены:", + "tw.extension.faceSensing.description": "Распознавайте лица с помощью камеры.", + "tw.extension.faceSensing.name": "Распознавание лиц", "tw.extensionGallery.error": "Ошибка загрузки галереи расширений. Посетите extensions.turbowarp.org чтобы найти больше расширений.", "tw.extensionGallery.loading": "Загрузка галереи расширений...", "tw.extensionGallery.more": "Почитать подробнее об расширениях на extensions.turbowarp.org.", @@ -3227,7 +3478,6 @@ "tw.footer.credits": "Благодарности", "tw.footer.disclaimer": "{APP_NAME} не связан со Scratch, командой Scratch или фондом Scratch Foundation.", "tw.footer.documentation": "Документация", - "tw.footer.donate": "Пожертвовать", "tw.footer.embed": "Встраивание", "tw.footer.parameters": "Параметры URL", "tw.footer.scratchDisclaimer": "Scratch - это проект Фонда Scratch Foundation. Он доступен бесплатно на сайте {scratchDotOrg}.", @@ -3311,6 +3561,7 @@ "tw.restorePoints.description": "{APP_NAME} периодически сохраняет точки восстановления на вашем компьютере, чтобы помочь восстановить ваш проект, если вы забудете сохранить. Это предназначено в качестве последнего средства для восстановления. Ваш компьютер может автоматически удалить эти точки восстановления в любое время. НЕ полагайтесь на эту функцию.", "tw.restorePoints.empty": "Точки восстановления не найдены.", "tw.restorePoints.error": "Ошибка загрузки точки восстановления: {error}", + "tw.restorePoints.exportError": "Ошибка при экспорте точки восстановления: {error}", "tw.restorePoints.intervalOption": "Точки восстановления созданы {time}.", "tw.restorePoints.loading": "Загрузка...", "tw.restorePoints.minutes": "каждые {n} минут", @@ -3319,7 +3570,7 @@ "tw.restorePoints.size": "Предполагаемый объем используемого хранилища: {size}", "tw.restorePoints.size2": "Костюмы или звуки, используемые несколькими точками восстановления, сохраняются только один раз.", "tw.restorePoints.title": "Точки Восстановления", - "tw.sample": "Проект Пример", + "tw.sample": "Пример Проекта", "tw.saveAs": "Сохранить как...", "tw.saveTo": "Сохранить в {file}", "tw.scratchUnsafeCloud": "Если вы сделаете эту облачную переменную, проект превысит лимит Scratch в {number} переменных, и некоторые переменные не будут работать, если вы загрузите проект в Scratch.", @@ -3367,7 +3618,8 @@ "tw.twExtension.description": "Новые странные блоки.", "tw.twExtension.name": "Блоки {APP_NAME}", "tw.unfavorite": "Отизбраннуть", - "tw.unknownPlatform.2": "Совместимость с {APP_NAME} не гарантирована. Вы можете продолжить на свой страх и риск, и мы можем оказаться не в состоянии помочь, если у вас возникнут какие-либо проблемы.", + "tw.unknownPlatform.1": "Проект был сделан для другой платформы:", + "tw.unknownPlatform.2": "Совместимость с {APP_NAME} не гарантирована. Вы можете продолжить на свой страх и риск, но мы не сможем гарантировать помощь при встрече с какими либо проблемами.", "tw.unknownPlatform.continue": "Я понимаю", "tw.unknownPlatform.title": "Неизвестная Платформа", "tw.unshared.2": "Для получения большей информации посетите этот сайт: {link}", @@ -3387,6 +3639,21 @@ "tw.viewFeaturedProjects": "Нажмите, чтобы посмотреть избранные проекты.", "tw.viewOnScratch": "Посмотреть проект на Scratch" }, + "sk": { + "tw.feedbackButton": "{APP_NAME} Spätná väzba", + "tw.interpolationEnabled": "Interpolácia", + "tw.menuBar.moreSettings": "Pokročilé Nastavenia", + "tw.paint.alpha": "priehľadnosť", + "tw.settingsModal.fps": "60 FPS (Vlastné FPS)", + "tw.settingsModal.fpsHelp": "Spúšťa scenáre 60 krát za sekundu namiesto 30. Väčšina projektov nefunguje pri použití tohto nastavenia, ak je tak aj v tvojom prípade, skús použiť Interpoláciu s vypnutým módom 60 FPS. {customFramerate}.", + "tw.settingsModal.fpsHelp.customFramerate": "Klikni pre použitie rýchlosti snímkov inej ako 30 alebo 60 FPS", + "tw.settingsModal.highQualityPen": "Vysoká Kvalita Pera", + "tw.settingsModal.highQualityPenHelp": "Umožňuje \"pen\" projektom, aby sa renderovali vo vyšších rozlíšeniach a zabraňuje niektoré zaokrúhľovania súradníc v editore. Nie všetky projekty benefitujú z tohto nastavenia a môže to ovplyvniť výkonnosť.", + "tw.settingsModal.interpolation": "Interpolácia", + "tw.settingsModal.interpolationHelp": "Spraví projekt plynulejší interpolovaním pohybu postavy. Interpolácia by nemala byť použitá pre 3D projekty, raytracery, \"pen\" projekty a sekajúce projekty, pretože interpolácia ich spomalí bez zlepšenia plynulosti.", + "tw.settingsModal.title": "Pokročilé Nastavenia", + "tw.stageHeader.full": "Prepni na veľkú scénu" + }, "sl": { "tw.accent.blue": "Modra", "tw.accent.purple": "Vijolična", @@ -3453,7 +3720,6 @@ "tw.footer.credits": "Zasluge", "tw.footer.disclaimer": "{APP_NAME} ni povezan s Scratchem, skupino Scratch ali fundacijo Scratch.", "tw.footer.documentation": "Dokumentacija", - "tw.footer.donate": "Prispevaj", "tw.footer.embed": "Vgraditev", "tw.footer.parameters": "URL parametri", "tw.footer.scratchDisclaimer": "Scratch je projekt fundacije Scratch Foundation. Brezplačno je na voljo na {scratchDotOrg}.", @@ -3712,7 +3978,6 @@ "tw.fonts.title": "Teckensnitt", "tw.footer.credits": "Krediter", "tw.footer.documentation": "Dokumentation", - "tw.footer.donate": "Donera", "tw.footer.embed": "Inbäddning", "tw.footer.parameters": "URL Parametrar", "tw.gui.crashMessage.description": "Vi är ledsna men det ser ut som sidan har krashat. Ladda om sidan för att försöka igen.", @@ -3909,7 +4174,6 @@ "tw.fonts.title": "Yazı tipleri", "tw.footer.credits": "Krediler", "tw.footer.documentation": "Belgesel", - "tw.footer.donate": "Bağış Yapın", "tw.footer.embed": "Gömmek", "tw.footer.parameters": " URL parametreler", "tw.geolocate.permission": "İzin verilirse tarayıcınız tarafından konum erişimine izin vermeniz istenebilir.", @@ -4083,6 +4347,11 @@ "tw.blocks.mouseButton.primary": "(0) основна", "tw.blocks.mouseButton.secondary": "(2) додаткова", "tw.blocks.openDocs": "Відкрити документацію", + "tw.browserModal.desktopSettings": "Відкрити Налаштування Програми", + "tw.browserModal.desktopTitle": "Система не підтримується", + "tw.browserModal.webgl1": "{APP_NAME} потребує WebGL, проте, схоже що ваш комп'ютер цього не підтримує. Зазвичай це тимчасова помилка, якої можна позбавитись перезавантаживши комп'ютер.", + "tw.browserModal.webglBrowser": "Використовуйте нову версію Chrome, Firefox, або Safari, і переконайтеся що ваші драйвери сучасні. Ви можете спробувати увімкнути \"апаратне прискорення\" або \"графічне прискорення\" у налаштуваннях вашого браузера.", + "tw.browserModal.webglDesktop": "Ви можете спробувати увімкнути \"апаратне прискорення\" у налаштуваннях програми:", "tw.cantUseCloud": "Хоча ви можете створювати хмарні змінні, вони не будуть працювати до тих пір, доки проєкт не буде завантажений на Scratch, або упакований за допомогою {packager}", "tw.changeUsername.cannotChangeWhileRunning": "Неможливо змінити ім'я користувача, поки проєкт працює.", "tw.clipboard.danger": "Якщо у вашому буфері обміну є такі речі, як паролі, можливо, цей проєкт може передавати їх іншим користувачам або серверам.", @@ -4113,6 +4382,9 @@ "tw.darkMode": "Увімкнути Світлу Тему", "tw.desktopCloud": "У версії для комп'ютера хмарні змінні синхронізуються між усіма відчиненими вікнами на одному комп'ютері. Завантажте проєкт на Scratch або використайте {packager}, щоб вони синхронізувалися глобально.", "tw.documentation": "Документація", + "tw.download.danger": "Цей файл не був перевірений розробниками {APP_NAME}.", + "tw.download.executable": "Це формат виконуваного файлу, який може запустити шкідливий код, якщо ви його відкриєте.", + "tw.download.file": "Проєкт хоче завантажити файл на ваш комп'ютер. Його буде збережено як {name} у ваших завантаженнях.", "tw.embed.persistent": "Якщо ви дозволите, подальші вставки на такий самий сайт будуть автоматично дозволені.", "tw.embed.risks": "Незважаючи на те, що вставна програма буде ізольована, в неї все одно буде доступ до інформації про ваш пристрій, такої як ваше IP та загальне місцезнаходження.", "tw.embed.title1": "Проєкт хоче вставити HTML контент поверх сцени:", @@ -4146,7 +4418,6 @@ "tw.footer.credits": "Подяки", "tw.footer.disclaimer": "{APP_NAME} ніяк не пов'язаний зі Scratch, Scratch Team або Scratch Foundation.", "tw.footer.documentation": "Документація", - "tw.footer.donate": "Пожертвувати", "tw.footer.embed": "Вбудовування", "tw.footer.parameters": "Параметри URL", "tw.footer.scratchDisclaimer": "Scratch, це проєкт організації Scratch Foundation. Він доступний безкоштовно на {scratchDotOrg}.", @@ -4231,6 +4502,7 @@ "tw.restorePoints.description": "{APP_NAME} періодично зберігає точки відновлення на вашому комп'ютері, щоб допомогти вам відновити ваш проєкт, якшо ви забудете зберегти його. Це створено, як остання можливість відновити ваш проєкт. Ваш комп'ютер може автоматично видаляти їх будь-коли. НЕ ПОКЛАДАЙТЕСЯ на цю функцію.", "tw.restorePoints.empty": "Точок відновлення не знайдено.", "tw.restorePoints.error": "Помилка при завантаженні точки відновлення: {error}", + "tw.restorePoints.exportError": "Помилка при експортуванні точки відновлення: {error}", "tw.restorePoints.intervalOption": "Точки відновлення буде створювано {time}.", "tw.restorePoints.loading": "Завантаження...", "tw.restorePoints.minutes": "кожні {n} хвилин", @@ -4287,6 +4559,7 @@ "tw.twExtension.description": "Дивні нові блоки.", "tw.twExtension.name": "Блоки {APP_NAME}", "tw.unfavorite": "Прибрати марку", + "tw.unknownPlatform.1": "Цей проєкт був створений для іншої платформи:", "tw.unknownPlatform.2": "Сумісність з {APP_NAME} не гарантована. Якщо ви продовжите, це буде на вашій відповідальності, і ми, можливо, не зможемо вам допомогти, якщо з'являться проблеми.", "tw.unknownPlatform.continue": "Я розумію", "tw.unknownPlatform.title": "Невідома Платформа", @@ -4388,6 +4661,11 @@ "tw.blocks.mouseButton.primary": "(0) 左键", "tw.blocks.mouseButton.secondary": "(2) 右键", "tw.blocks.openDocs": "打开文档", + "tw.browserModal.desktopSettings": "打开桌面设置", + "tw.browserModal.desktopTitle": "系统不支持", + "tw.browserModal.webgl1": "{APP_NAME}需要 WebGL ,但是您的电脑似乎不支持它。这通常是临时性错误,可以通过重启电脑修复", + "tw.browserModal.webglBrowser": "使用最新版本的 Chrome、Firefox 或 Safari,并确保您的显卡驱动程序是最新的。您还可以尝试在浏览器设置中切换“图形加速”或“硬件加速”选项。", + "tw.browserModal.webglDesktop": "您还可以尝试在桌面设置中切换“图形加速”选项:", "tw.cantUseCloud": "你创建的云变量仅在被上传到有云变量功能的网站或使用 {packager} 这样的工具转换时才生效。", "tw.changeUsername.cannotChangeWhileRunning": "作品运行时无法更改用户名。", "tw.clipboard.danger": "如果你的剪贴板包含像密码之类的内容,此作品可能会共享这些给其他用户或服务器。", @@ -4416,7 +4694,7 @@ "tw.customReporters.description": "允许自制积木提供返回值。", "tw.customReporters.name": "自定义返回值", "tw.darkMode": "切换到亮色主题", - "tw.desktopCloud": "在桌面版应用中,云变量只会在这台电脑上的所有桌面版应用窗口间同步。将项目上传到 Scratch 或使用类似{packager}的工具来让它们在全球范围内同步。", + "tw.desktopCloud": "在桌面版应用中,云变量只会在这台电脑上的所有桌面版应用窗口间同步。将作品上传到 Scratch 或使用类似{packager}的工具来让它们在全球范围内同步。", "tw.documentation": "文档", "tw.download.danger": "此文件尚未经由{APP_NAME}的开发者审查。", "tw.download.executable": "此文件为可执行文件,运行可能导致您的电脑受到恶意代码的损害。", @@ -4425,6 +4703,8 @@ "tw.embed.risks": "即使嵌入内容在沙盒中运行,它仍能访问像IP地址或大概位置等设备信息。", "tw.embed.title1": "此作品想要在舞台上嵌入 HTML 内容:", "tw.embed.title2": "此作品想要在舞台上嵌入在线内容:", + "tw.extension.faceSensing.description": "使用摄像头侦测人脸。", + "tw.extension.faceSensing.name": "人脸侦测", "tw.extensionGallery.error": "加载扩展库时出错。 访问 extensions.turbowarp.org 以查找更多扩展。", "tw.extensionGallery.loading": "正在加载扩展库……", "tw.extensionGallery.more": "要了解有关扩展的更多信息,请访问 extensions.turbowarp.org", @@ -4449,15 +4729,14 @@ "tw.fonts.system": "系统字体", "tw.fonts.system.name": "输入电脑中的字体名称。这个字体可能无法对所有人正确显示。", "tw.fonts.system1": "添加系统字体", - "tw.fonts.system2": "可能可以在 Scratch 中运行,但不一定所有人都能正确显示。", + "tw.fonts.system2": "也许能在 Scratch 中运行,但不一定所有人都能正确显示。", "tw.fonts.title": "字体", "tw.footer.credits": "鸣谢", "tw.footer.disclaimer": "{APP_NAME} 不属于 Scratch、Scratch 团队或 Scratch 基金会。", "tw.footer.documentation": "文档", - "tw.footer.donate": "捐赠", "tw.footer.embed": "将作品嵌入到网站", "tw.footer.parameters": "网址参数", - "tw.footer.scratchDisclaimer": "Scratch 是 Scratch 基金会的一个项目。它在 {scratchDotOrg} 可供免费使用。", + "tw.footer.scratchDisclaimer": "Scratch 是 Scratch 基金会的一个项目。它可在 {scratchDotOrg} 免费使用。", "tw.fps": "{framerate} 帧", "tw.geolocate.permission": "如果允许,浏览器可能会向您获取位置访问权限的许可。", "tw.geolocate.title": "此作品希望知道您的位置。", @@ -4540,6 +4819,7 @@ "tw.restorePoints.description": "{APP_NAME} 会定期在计算机上保存还原点,以便在忘记保存时帮助恢复作品。这是恢复的最后手段。您的计算机可能会随时悄悄删除这些还原点。请勿依赖此功能。", "tw.restorePoints.empty": "未找到还原点。", "tw.restorePoints.error": "加载还原点时出错:{error}", + "tw.restorePoints.exportError": "导出还原点时出错:{error}", "tw.restorePoints.intervalOption": "{time}创建还原点", "tw.restorePoints.loading": "加载中……", "tw.restorePoints.minutes": "每 {n} 分钟", @@ -4561,7 +4841,7 @@ "tw.settingsModal.customStageSizeHelp": "改变 Scratch 的屏幕大小,原大小为 480x360。例如,将分辨率改为 640x360 可实现宽屏作品。但是只有极少作品能在修改尺寸后正常运行。", "tw.settingsModal.dangerZone": "危险功能", "tw.settingsModal.disableCompiler": "禁用编译器", - "tw.settingsModal.disableCompilerHelp": "禁用 {APP_NAME} 编译器。除非您在编辑作品,希望及时更新脚本,否则请勿打开此项。", + "tw.settingsModal.disableCompilerHelp": "禁用 {APP_NAME} 编译器。您可能在编辑作品时希望启用此项以及时更新脚本。除此之外,您永远不应该启用此项。", "tw.settingsModal.featured": "特色", "tw.settingsModal.fps": "60 帧(自定义帧率)", "tw.settingsModal.fpsHelp": "每秒运行脚本 60 次,而不是 30 次。启用此选项后,大多数作品将无法正常工作。如果是这种情况,您应该尝试在禁用 60 帧模式的情况下使用补帧。{customFramerate}。", @@ -4596,6 +4876,7 @@ "tw.twExtension.description": "奇怪的新积木。与 Scratch 不兼容,但可以在 Scratch 加载。", "tw.twExtension.name": "{APP_NAME}积木", "tw.unfavorite": "取消收藏", + "tw.unknownPlatform.1": "该项目是为其他平台开发的:", "tw.unknownPlatform.2": "无法保证与{APP_NAME}的兼容性。您可以无视风险继续操作,但如果您遇到任何问题,我们可能无法提供帮助。", "tw.unknownPlatform.continue": "我明白了", "tw.unknownPlatform.title": "未知平台", @@ -4617,6 +4898,7 @@ "tw.viewOnScratch": "在 Scratch 网站上查看作品" }, "zh-tw": { + "tw.alerts.lostPeripheralConnection": "與{extensionName}的連線中斷了。", "tw.backpack.rename": "新名稱:", "tw.blocks.addons": "擴充功能", "tw.blocks.buttonIsDown": "[MOUSE_BUTTON] 被按下?", @@ -4625,12 +4907,24 @@ "tw.blocks.mouseButton.primary": "(0)左鍵", "tw.blocks.mouseButton.secondary": "(2)右鍵", "tw.blocks.openDocs": "開啟文檔", + "tw.browserModal.desktopSettings": "開啟桌面設置", + "tw.browserModal.desktopTitle": "系統未被支援", + "tw.browserModal.webgl1": "{APP_NAME}需要WebGL,但是你的電腦似乎不支援它。這通常是一個暫時性的錯誤,只需要重啟就可以解決。", + "tw.browserModal.webglBrowser": "使用最新版本的Chrome, Firebox或者Safari, 並且確保你的圖形驅動程式是最新版本。你也可以嘗試在瀏覽器設置中開啟\"圖形加速\"或者\"硬體加速“。", + "tw.browserModal.webglDesktop": "你也可以嘗試在桌面設置開啟\"圖形加速\"設定:", + "tw.cantUseCloud": "即使你創建了雲端變量,你也需要把這個項目上傳到Scratch或者使用類似{packager}的工具轉換,才能讓它生效。", "tw.code": "原始碼", + "tw.createdBy": "創建者:", + "tw.documentation": "文檔", + "tw.favorite": "收藏", "tw.featuredProjectsStudio": "在 Scratch 查看該創作坊", "tw.feedback": "回報建議及錯誤", + "tw.feedbackButton": "{APP_NAME}反饋", "tw.footer.credits": "感謝", + "tw.footer.documentation": "文檔", "tw.footer.embed": "嵌入", "tw.footer.parameters": "網址參數", + "tw.gui.crashMessage.description": "我們非常抱歉,但是頁面似乎崩潰了。請刷新你的頁面試試看。", "tw.guiDefaultTitle": "使 Scratch 專案跑得更快", "tw.home.credit": "備註與謝誌", "tw.home.instructions": "操作說明", @@ -4640,6 +4934,7 @@ "tw.invalidParameters.fps": "無效的「影格率」網址參數", "tw.invalidProject.title": "錯誤", "tw.loader.downloadingAssets": "下載素材中({complete}/{total})……", + "tw.loader.loadingAssets": "加載資源中(第{complete} /{total}個)", "tw.loader.projectData": "載入專案中……", "tw.menuBar.60off": "關閉 60 FPS模式", "tw.menuBar.60on": "開啟 60 FPS模式", @@ -4652,12 +4947,19 @@ "tw.menuBar.compileError": "{sprite}:{error}", "tw.menuBar.desktopSettings": "桌面設定", "tw.menuBar.moreSettings": "進階設定", + "tw.menuBar.newWindow": "新窗口", + "tw.menuBar.package": "打包作品", + "tw.menuBar.reportError1": "有些代碼在編譯時發生了錯誤", "tw.menuBar.reportError2": "這是個錯誤,請回報。", + "tw.menuBar.restorePoints": "還原點", "tw.menuBar.saveAs": "儲存為 {file}", "tw.menuBar.seeInside": "切換到程式頁面", + "tw.mono": "單聲道", "tw.oldDownload": "存儲為獨立文件…", "tw.paint.alpha": "不透明度", + "tw.paint.fonts.more": "增加更多字體", "tw.privacy": "隱私權政策", + "tw.sample": "例子作品", "tw.saveAs": "另存為…", "tw.saveTo": "存儲為{file}", "tw.settingsModal.customStageSize": "自訂舞臺大小:", @@ -4685,8 +4987,10 @@ "tw.settingsModal.warpTimer": "防卡死", "tw.settingsModal.warpTimerHelp": "程式卡在迴圈裡時會以低幀率運行,以防止卡死。這可以防止崩潰,但會影響性能,僅在編輯器預設啟用。", "tw.spriteSelectorItem.rename": "重新命名", + "tw.stereo": "雙聲道", "tw.studioview.authorAttribution": "作者:{author}", "tw.studioview.hoverText": "{title},作者:{author}", + "tw.unfavorite": "取消搜藏", "tw.usernameModal.reset": "重設", "tw.usernameModal.title": "更改用戶名稱", "tw.viewFeaturedProjects": "瀏覽精選專案",