From e5756348c1b23be269ee4033628fdf8d4373b15f Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Oct 2026 22:10:51 +0000 Subject: [PATCH 1/2] CI: also build the app for the iOS Simulator Catches changes that break the Xcode project (missing file references, compile errors in the app target), which swift test on VisuStructCore cannot see. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ --- .github/workflows/core-tests.yml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/workflows/core-tests.yml b/.github/workflows/core-tests.yml index b9263bb7..01bc2764 100644 --- a/.github/workflows/core-tests.yml +++ b/.github/workflows/core-tests.yml @@ -1,4 +1,4 @@ -name: VisuStructCore tests +name: CI on: push: @@ -17,3 +17,17 @@ jobs: run: swift --version - name: Build and test run: swift test + + app-build: + runs-on: macos-15 + steps: + - uses: actions/checkout@v4 + - name: Xcode version + run: xcodebuild -version + - name: Build app for iOS Simulator + run: | + xcodebuild build \ + -project VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct.xcodeproj \ + -scheme VisuStruct \ + -destination 'generic/platform=iOS Simulator' \ + CODE_SIGNING_ALLOWED=NO From 5dc7512c5b58108f83817e3db922447014062fb2 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 19 Oct 2026 06:48:46 +0000 Subject: [PATCH 2/2] Simulation view: real empty-state hints, balanced portrait layout on iPad - Trace/variables/output cards no longer say "will be shown here later"; they say nothing has run yet (all 21 languages). - The side column is only used in landscape. iPad portrait now shows the diagram on top and the panel across the full width below, with controls left and trace/variables/output right. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ --- .../VisuStruct/ContentView.swift | 23 +- .../Simulation/SimulationPanels.swift | 238 +++++++++++------- .../VisuStruct/ar.lproj/Localizable.strings | 6 +- .../VisuStruct/da.lproj/Localizable.strings | 6 +- .../VisuStruct/de.lproj/Localizable.strings | 6 +- .../VisuStruct/el.lproj/Localizable.strings | 6 +- .../VisuStruct/en.lproj/Localizable.strings | 6 +- .../VisuStruct/es.lproj/Localizable.strings | 6 +- .../VisuStruct/fr.lproj/Localizable.strings | 6 +- .../VisuStruct/he.lproj/Localizable.strings | 6 +- .../VisuStruct/it.lproj/Localizable.strings | 6 +- .../VisuStruct/ja.lproj/Localizable.strings | 6 +- .../VisuStruct/ko.lproj/Localizable.strings | 6 +- .../VisuStruct/nb.lproj/Localizable.strings | 6 +- .../VisuStruct/nl.lproj/Localizable.strings | 6 +- .../VisuStruct/pl.lproj/Localizable.strings | 6 +- .../pt-PT.lproj/Localizable.strings | 6 +- .../VisuStruct/ru.lproj/Localizable.strings | 6 +- .../VisuStruct/sv.lproj/Localizable.strings | 6 +- .../VisuStruct/tr.lproj/Localizable.strings | 6 +- .../VisuStruct/uk.lproj/Localizable.strings | 6 +- .../zh-Hans.lproj/Localizable.strings | 6 +- .../zh-Hant.lproj/Localizable.strings | 6 +- 23 files changed, 228 insertions(+), 159 deletions(-) diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ContentView.swift b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ContentView.swift index 09309a11..3e3f32b7 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ContentView.swift +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ContentView.swift @@ -771,7 +771,10 @@ struct ContentView: View { @ViewBuilder private var simulationDetailView: some View { GeometryReader { geo in - let useColumns = geo.size.width >= 760 + // Seitenspalte nur im Querformat; hochkant wäre sie gequetscht und unter dem Diagramm bliebe Platz frei. + let useColumns = geo.size.width >= 760 && geo.size.width > geo.size.height + // iPad hochkant: Diagramm oben, Steuerfeld darunter über die volle Breite. + let useWideStack = !useColumns && geo.size.width >= 600 && geo.size.height >= 700 let panelWidth = min(max(geo.size.width * 0.32, 280), 360) if useColumns { @@ -792,6 +795,24 @@ struct ContentView: View { .frame(width: panelWidth) .frame(maxHeight: .infinity, alignment: .top) } + } else if useWideStack { + VStack(alignment: .leading, spacing: 16) { + simulationCanvasBlock + .frame(height: geo.size.height * 0.5) + SimulationStatePanel( + engine: simulationEngine, + isPlaying: isSimulationPlaying, + inputText: $simulationInputText, + highlightModeRaw: $simulationHighlightModeRaw, + onPlay: playSimulation, + onPause: pauseSimulation, + onStep: stepSimulation, + onSubmitInput: submitSimulationInput, + onStop: resetSimulation, + usesWideLayout: true + ) + .frame(maxHeight: .infinity) + } } else { ScrollView { VStack(alignment: .leading, spacing: 16) { diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Simulation/SimulationPanels.swift b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Simulation/SimulationPanels.swift index af85e388..096fab36 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Simulation/SimulationPanels.swift +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Simulation/SimulationPanels.swift @@ -15,6 +15,8 @@ struct SimulationStatePanel: View { let onStep: () -> Void let onSubmitInput: () -> Void let onStop: () -> Void + /// Hochkant auf dem iPad: Steuerung links, Schritt/Variablen/Ausgabe rechts statt alles untereinander. + var usesWideLayout: Bool = false private var sortedVariables: [(String, VisuStructSimulationValue)] { engine.state.variables @@ -26,7 +28,9 @@ struct SimulationStatePanel: View { var body: some View { Group { - if isWaitingForInput { + if usesWideLayout { + wideStack + } else if isWaitingForInput { ScrollView { panelStack(flexibleCardsFillHeight: false) } @@ -50,125 +54,169 @@ struct SimulationStatePanel: View { @ViewBuilder private func panelStack(flexibleCardsFillHeight: Bool) -> some View { VStack(alignment: .leading, spacing: 16) { - VStack(alignment: .leading, spacing: 10) { - Label(lang.tr("simulation_controls"), systemImage: "slider.horizontal.3") - .font(.headline) + controlsSection + inputCard + traceCard(flexibleCardsFillHeight: flexibleCardsFillHeight) + variablesCard(flexibleCardsFillHeight: flexibleCardsFillHeight) + outputCard(flexibleCardsFillHeight: flexibleCardsFillHeight) + .layoutPriority(flexibleCardsFillHeight ? 1 : 0) + noticeText + } + } - LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible())], spacing: 10) { - SimulationControlButton(title: lang.tr("simulation_play"), systemImage: "play.fill", isDisabled: isPlaying || !engine.canStep, action: onPlay) - SimulationControlButton(title: lang.tr("simulation_pause"), systemImage: "pause.fill", isDisabled: !isPlaying, action: onPause) - SimulationControlButton(title: lang.tr("simulation_step"), systemImage: "arrow.right.circle", isDisabled: isPlaying || !engine.canStep, action: onStep) - SimulationControlButton(title: lang.tr("simulation_stop"), systemImage: "stop.fill", isDisabled: false, action: onStop) + private var wideStack: some View { + HStack(alignment: .top, spacing: 16) { + ScrollView { + VStack(alignment: .leading, spacing: 16) { + controlsSection + inputCard + noticeText } + } + .scrollBounceBehavior(.basedOnSize) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) - VStack(alignment: .leading, spacing: 6) { - Text(lang.tr("simulation_highlight_label")) - .font(.caption) - .foregroundStyle(.secondary) - Picker(lang.tr("simulation_highlight_label"), selection: $highlightModeRaw) { - Text(lang.tr("simulation_highlight_last")).tag(SimulationHighlightMode.lastExecuted.rawValue) - Text(lang.tr("simulation_highlight_next")).tag(SimulationHighlightMode.nextToExecute.rawValue) - } - .pickerStyle(.segmented) + VStack(alignment: .leading, spacing: 16) { + traceCard(flexibleCardsFillHeight: false) + HStack(alignment: .top, spacing: 16) { + variablesCard(flexibleCardsFillHeight: true) + outputCard(flexibleCardsFillHeight: true) } + .frame(maxHeight: .infinity) } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) + } + } - SimulationInputCard( - prompt: engine.state.inputRequest?.prompt, - variableName: engine.state.inputRequest?.variableName, - valueType: engine.state.inputRequest?.valueType, - inputError: engine.state.inputErrorNotice?.localized(in: lang), - inputText: $inputText, - onSubmit: onSubmitInput - ) + private var controlsSection: some View { + VStack(alignment: .leading, spacing: 10) { + Label(lang.tr("simulation_controls"), systemImage: "slider.horizontal.3") + .font(.headline) - SimulationPlaceholderCard( - title: lang.tr("simulation_trace"), - systemImage: "arrow.left.arrow.right", - minHeight: flexibleCardsFillHeight ? 130 : 88 - ) { - if let trace = engine.state.lastTrace { - Text(trace) - .font(.body.monospaced()) - .frame(maxWidth: .infinity, alignment: .leading) - .fixedSize(horizontal: false, vertical: true) - } else { - Text(lang.tr("simulation_trace_placeholder")) - .font(.body) - .foregroundStyle(.secondary) - .fixedSize(horizontal: false, vertical: true) - } + LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible())], spacing: 10) { + SimulationControlButton(title: lang.tr("simulation_play"), systemImage: "play.fill", isDisabled: isPlaying || !engine.canStep, action: onPlay) + SimulationControlButton(title: lang.tr("simulation_pause"), systemImage: "pause.fill", isDisabled: !isPlaying, action: onPause) + SimulationControlButton(title: lang.tr("simulation_step"), systemImage: "arrow.right.circle", isDisabled: isPlaying || !engine.canStep, action: onStep) + SimulationControlButton(title: lang.tr("simulation_stop"), systemImage: "stop.fill", isDisabled: false, action: onStop) } - SimulationPlaceholderCard( - title: lang.tr("simulation_variables"), - systemImage: "curlybraces", - minHeight: flexibleCardsFillHeight ? 190 : 96, - contentFillsHeight: flexibleCardsFillHeight - ) { - if sortedVariables.isEmpty { - Text(lang.tr("simulation_variables_placeholder")) - .font(.body) - .foregroundStyle(.secondary) - .fixedSize(horizontal: false, vertical: true) - } else { - ScrollView { - VStack(alignment: .leading, spacing: 8) { - ForEach(sortedVariables, id: \.0) { name, value in - HStack(alignment: .firstTextBaseline) { - Text(name) - .font(.body.monospaced().weight(.semibold)) - Spacer(minLength: 12) - Text(value.description) - .font(.body.monospaced()) - .foregroundStyle(.secondary) - } - } - } - .padding(.trailing, 14) - .frame(maxWidth: .infinity, alignment: .leading) - } - .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) + VStack(alignment: .leading, spacing: 6) { + Text(lang.tr("simulation_highlight_label")) + .font(.caption) + .foregroundStyle(.secondary) + Picker(lang.tr("simulation_highlight_label"), selection: $highlightModeRaw) { + Text(lang.tr("simulation_highlight_last")).tag(SimulationHighlightMode.lastExecuted.rawValue) + Text(lang.tr("simulation_highlight_next")).tag(SimulationHighlightMode.nextToExecute.rawValue) } + .pickerStyle(.segmented) } + } + } - SimulationPlaceholderCard( - title: lang.tr("simulation_output"), - systemImage: "terminal", - minHeight: flexibleCardsFillHeight ? 170 : 96, - contentFillsHeight: flexibleCardsFillHeight - ) { - if engine.state.outputLines.isEmpty { - Text(lang.tr("simulation_output_placeholder")) - .font(.body) - .foregroundStyle(.secondary) - .fixedSize(horizontal: false, vertical: true) - } else { - ScrollView { - VStack(alignment: .leading, spacing: 6) { - ForEach(Array(engine.state.outputLines.enumerated()), id: \.offset) { _, line in - Text(line) + private var inputCard: some View { + SimulationInputCard( + prompt: engine.state.inputRequest?.prompt, + variableName: engine.state.inputRequest?.variableName, + valueType: engine.state.inputRequest?.valueType, + inputError: engine.state.inputErrorNotice?.localized(in: lang), + inputText: $inputText, + onSubmit: onSubmitInput + ) + } + + private func traceCard(flexibleCardsFillHeight: Bool) -> some View { + SimulationPlaceholderCard( + title: lang.tr("simulation_trace"), + systemImage: "arrow.left.arrow.right", + minHeight: flexibleCardsFillHeight ? 130 : 88 + ) { + if let trace = engine.state.lastTrace { + Text(trace) + .font(.body.monospaced()) + .frame(maxWidth: .infinity, alignment: .leading) + .fixedSize(horizontal: false, vertical: true) + } else { + Text(lang.tr("simulation_trace_placeholder")) + .font(.body) + .foregroundStyle(.secondary) + .fixedSize(horizontal: false, vertical: true) + } + } + } + + private func variablesCard(flexibleCardsFillHeight: Bool) -> some View { + SimulationPlaceholderCard( + title: lang.tr("simulation_variables"), + systemImage: "curlybraces", + minHeight: flexibleCardsFillHeight ? 190 : 96, + contentFillsHeight: flexibleCardsFillHeight + ) { + if sortedVariables.isEmpty { + Text(lang.tr("simulation_variables_placeholder")) + .font(.body) + .foregroundStyle(.secondary) + .fixedSize(horizontal: false, vertical: true) + } else { + ScrollView { + VStack(alignment: .leading, spacing: 8) { + ForEach(sortedVariables, id: \.0) { name, value in + HStack(alignment: .firstTextBaseline) { + Text(name) + .font(.body.monospaced().weight(.semibold)) + Spacer(minLength: 12) + Text(value.description) .font(.body.monospaced()) - .frame(maxWidth: .infinity, alignment: .leading) + .foregroundStyle(.secondary) } } - .padding(.trailing, 4) - .frame(maxWidth: .infinity, alignment: .leading) } - .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) + .padding(.trailing, 14) + .frame(maxWidth: .infinity, alignment: .leading) } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) } - .layoutPriority(flexibleCardsFillHeight ? 1 : 0) + } + } - if let message = engine.state.notice?.localized(in: lang) { - Text(message) - .font(.caption) + private func outputCard(flexibleCardsFillHeight: Bool) -> some View { + SimulationPlaceholderCard( + title: lang.tr("simulation_output"), + systemImage: "terminal", + minHeight: flexibleCardsFillHeight ? 170 : 96, + contentFillsHeight: flexibleCardsFillHeight + ) { + if engine.state.outputLines.isEmpty { + Text(lang.tr("simulation_output_placeholder")) + .font(.body) .foregroundStyle(.secondary) .fixedSize(horizontal: false, vertical: true) + } else { + ScrollView { + VStack(alignment: .leading, spacing: 6) { + ForEach(Array(engine.state.outputLines.enumerated()), id: \.offset) { _, line in + Text(line) + .font(.body.monospaced()) + .frame(maxWidth: .infinity, alignment: .leading) + } + } + .padding(.trailing, 4) + .frame(maxWidth: .infinity, alignment: .leading) + } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) } } } + @ViewBuilder + private var noticeText: some View { + if let message = engine.state.notice?.localized(in: lang) { + Text(message) + .font(.caption) + .foregroundStyle(.secondary) + .fixedSize(horizontal: false, vertical: true) + } + } + } private struct SimulationInputCard: View { diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings index 3fd96a74..947183e1 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "يرجى إدخال عدد صحيح."; "simulation_trace" = "آخر خطوة"; -"simulation_trace_placeholder" = "سيتم شرح آخر خطوة تم تنفيذها هنا."; +"simulation_trace_placeholder" = "لم يُنفَّذ أي خطوة بعد."; "simulation_variables" = "المتغيرات"; -"simulation_variables_placeholder" = "ستظهر قيم المتغيرات الحالية هنا لاحقًا."; +"simulation_variables_placeholder" = "لا توجد متغيرات بعد."; "simulation_output" = "المخرجات"; -"simulation_output_placeholder" = "ستظهر مخرجات المحاكاة هنا لاحقًا."; +"simulation_output_placeholder" = "لا يوجد إخراج بعد."; "action_delete_selection" = "حذف التحديد"; "ctx_copy" = "نسخ"; "ctx_cut" = "قص"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings index 624c3c8c..45ceaa25 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Indtast et heltal."; "simulation_trace" = "Sidste trin"; -"simulation_trace_placeholder" = "Det senest udførte trin forklares her."; +"simulation_trace_placeholder" = "Intet trin udført endnu."; "simulation_variables" = "Variabler"; -"simulation_variables_placeholder" = "Aktuelle variabelværdier vises her senere."; +"simulation_variables_placeholder" = "Ingen variabler endnu."; "simulation_output" = "Output"; -"simulation_output_placeholder" = "Simulationens output vises her senere."; +"simulation_output_placeholder" = "Intet output endnu."; "action_delete_selection" = "Slet markering"; "ctx_copy" = "Kopiér"; "ctx_cut" = "Klip"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings index ca485498..5aa7d433 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Bitte eine ganze Zahl eingeben."; "simulation_trace" = "Letzter Schritt"; -"simulation_trace_placeholder" = "Hier wird später der zuletzt ausgeführte Schritt erklärt."; +"simulation_trace_placeholder" = "Noch kein Schritt ausgeführt."; "simulation_variables" = "Variablen"; -"simulation_variables_placeholder" = "Hier werden später die aktuellen Variablenwerte angezeigt."; +"simulation_variables_placeholder" = "Noch keine Variablen."; "simulation_output" = "Ausgabe"; -"simulation_output_placeholder" = "Hier erscheint später die Ausgabe der Simulation."; +"simulation_output_placeholder" = "Noch keine Ausgabe."; "action_delete_selection" = "Auswahl löschen"; "ctx_copy" = "Kopieren"; "ctx_cut" = "Ausschneiden"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings index 9c3d4e7d..a934b1e5 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Πληκτρολογήστε έναν ακέραιο αριθμό."; "simulation_trace" = "Τελευταίο βήμα"; -"simulation_trace_placeholder" = "Το τελευταίο εκτελεσμένο βήμα θα εξηγείται εδώ."; +"simulation_trace_placeholder" = "Δεν έχει εκτελεστεί ακόμη κανένα βήμα."; "simulation_variables" = "Μεταβλητές"; -"simulation_variables_placeholder" = "Οι τρέχουσες τιμές των μεταβλητών θα εμφανίζονται εδώ αργότερα."; +"simulation_variables_placeholder" = "Δεν υπάρχουν ακόμη μεταβλητές."; "simulation_output" = "Έξοδος"; -"simulation_output_placeholder" = "Η έξοδος της προσομοίωσης θα εμφανίζεται εδώ αργότερα."; +"simulation_output_placeholder" = "Δεν υπάρχει ακόμη έξοδος."; "action_delete_selection" = "Διαγραφή επιλογής"; "ctx_copy" = "Αντιγραφή"; "ctx_cut" = "Αποκοπή"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings index 644397cd..3bfe1d99 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Please enter a whole number."; "simulation_trace" = "Last Step"; -"simulation_trace_placeholder" = "The last executed step will be explained here."; +"simulation_trace_placeholder" = "No step executed yet."; "simulation_variables" = "Variables"; -"simulation_variables_placeholder" = "Current variable values will be shown here later."; +"simulation_variables_placeholder" = "No variables yet."; "simulation_output" = "Output"; -"simulation_output_placeholder" = "The simulation output will appear here later."; +"simulation_output_placeholder" = "No output yet."; "action_delete_selection" = "Delete Selection"; "ctx_copy" = "Copy"; "ctx_cut" = "Cut"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings index aaf7e993..6a571754 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Introduce un número entero."; "simulation_trace" = "Último paso"; -"simulation_trace_placeholder" = "Aquí se explicará el último paso ejecutado."; +"simulation_trace_placeholder" = "Aún no se ha ejecutado ningún paso."; "simulation_variables" = "Variables"; -"simulation_variables_placeholder" = "Aquí se mostrarán más adelante los valores actuales de las variables."; +"simulation_variables_placeholder" = "Aún no hay variables."; "simulation_output" = "Salida"; -"simulation_output_placeholder" = "Aquí aparecerá más adelante la salida de la simulación."; +"simulation_output_placeholder" = "Aún no hay salida."; "action_delete_selection" = "Eliminar selección"; "ctx_copy" = "Copiar"; "ctx_cut" = "Cortar"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings index 30185789..e75ac72b 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Veuillez saisir un nombre entier."; "simulation_trace" = "Dernière étape"; -"simulation_trace_placeholder" = "La dernière étape exécutée sera expliquée ici."; +"simulation_trace_placeholder" = "Aucune étape exécutée pour l’instant."; "simulation_variables" = "Variables"; -"simulation_variables_placeholder" = "Les valeurs actuelles des variables seront affichées ici plus tard."; +"simulation_variables_placeholder" = "Aucune variable pour l’instant."; "simulation_output" = "Sortie"; -"simulation_output_placeholder" = "La sortie de la simulation apparaîtra ici plus tard."; +"simulation_output_placeholder" = "Aucune sortie pour l’instant."; "action_delete_selection" = "Supprimer la sélection"; "ctx_copy" = "Copier"; "ctx_cut" = "Couper"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings index 3173507c..a572f20d 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "הזינו מספר שלם."; "simulation_trace" = "הצעד האחרון"; -"simulation_trace_placeholder" = "הצעד האחרון שבוצע יוסבר כאן."; +"simulation_trace_placeholder" = "עדיין לא בוצע אף צעד."; "simulation_variables" = "משתנים"; -"simulation_variables_placeholder" = "ערכי המשתנים הנוכחיים יוצגו כאן בהמשך."; +"simulation_variables_placeholder" = "עדיין אין משתנים."; "simulation_output" = "פלט"; -"simulation_output_placeholder" = "פלט הסימולציה יופיע כאן בהמשך."; +"simulation_output_placeholder" = "עדיין אין פלט."; "action_delete_selection" = "מחיקת בחירה"; "ctx_copy" = "העתק"; "ctx_cut" = "גזור"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings index 4cf33c52..1038f1c0 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Inserisci un numero intero."; "simulation_trace" = "Ultimo passo"; -"simulation_trace_placeholder" = "Qui verrà spiegato l’ultimo passo eseguito."; +"simulation_trace_placeholder" = "Nessun passo ancora eseguito."; "simulation_variables" = "Variabili"; -"simulation_variables_placeholder" = "Qui verranno mostrati più avanti i valori attuali delle variabili."; +"simulation_variables_placeholder" = "Nessuna variabile per ora."; "simulation_output" = "Output"; -"simulation_output_placeholder" = "Qui apparirà più avanti l’output della simulazione."; +"simulation_output_placeholder" = "Nessun output per ora."; "action_delete_selection" = "Elimina selezione"; "ctx_copy" = "Copia"; "ctx_cut" = "Taglia"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings index 33c070e7..410ae8ad 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "整数を入力してください。"; "simulation_trace" = "最後のステップ"; -"simulation_trace_placeholder" = "最後に実行されたステップがここに説明されます。"; +"simulation_trace_placeholder" = "まだステップは実行されていません。"; "simulation_variables" = "変数"; -"simulation_variables_placeholder" = "現在の変数値は後でここに表示されます。"; +"simulation_variables_placeholder" = "まだ変数はありません。"; "simulation_output" = "出力"; -"simulation_output_placeholder" = "シミュレーションの出力は後でここに表示されます。"; +"simulation_output_placeholder" = "まだ出力はありません。"; "action_delete_selection" = "選択を削除"; "ctx_copy" = "コピー"; "ctx_cut" = "切り取り"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings index 0f5f89d5..bbb00f9c 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "정수를 입력하세요."; "simulation_trace" = "마지막 단계"; -"simulation_trace_placeholder" = "마지막으로 실행된 단계가 여기에 설명됩니다."; +"simulation_trace_placeholder" = "아직 실행된 단계가 없습니다."; "simulation_variables" = "변수"; -"simulation_variables_placeholder" = "현재 변수 값이 나중에 여기에 표시됩니다."; +"simulation_variables_placeholder" = "아직 변수가 없습니다."; "simulation_output" = "출력"; -"simulation_output_placeholder" = "시뮬레이션 출력이 나중에 여기에 표시됩니다."; +"simulation_output_placeholder" = "아직 출력이 없습니다."; "action_delete_selection" = "선택 삭제"; "ctx_copy" = "복사"; "ctx_cut" = "잘라내기"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings index b3236574..3d7b785e 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Skriv inn et heltall."; "simulation_trace" = "Siste steg"; -"simulation_trace_placeholder" = "Det sist utførte steget forklares her."; +"simulation_trace_placeholder" = "Ingen trinn er utført ennå."; "simulation_variables" = "Variabler"; -"simulation_variables_placeholder" = "Gjeldende variabelverdier vises her senere."; +"simulation_variables_placeholder" = "Ingen variabler ennå."; "simulation_output" = "Utdata"; -"simulation_output_placeholder" = "Simuleringens utdata vises her senere."; +"simulation_output_placeholder" = "Ingen utdata ennå."; "action_delete_selection" = "Slett markering"; "ctx_copy" = "Kopier"; "ctx_cut" = "Klipp ut"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings index 327027a3..67a50b87 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Voer een geheel getal in."; "simulation_trace" = "Laatste stap"; -"simulation_trace_placeholder" = "De laatst uitgevoerde stap wordt hier uitgelegd."; +"simulation_trace_placeholder" = "Nog geen stap uitgevoerd."; "simulation_variables" = "Variabelen"; -"simulation_variables_placeholder" = "De huidige variabele waarden worden hier later getoond."; +"simulation_variables_placeholder" = "Nog geen variabelen."; "simulation_output" = "Uitvoer"; -"simulation_output_placeholder" = "De uitvoer van de simulatie verschijnt hier later."; +"simulation_output_placeholder" = "Nog geen uitvoer."; "action_delete_selection" = "Selectie verwijderen"; "ctx_copy" = "Kopiëren"; "ctx_cut" = "Knippen"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings index 383e3131..51af815d 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Wpisz liczbę całkowitą."; "simulation_trace" = "Ostatni krok"; -"simulation_trace_placeholder" = "Tutaj zostanie wyjaśniony ostatnio wykonany krok."; +"simulation_trace_placeholder" = "Nie wykonano jeszcze żadnego kroku."; "simulation_variables" = "Zmienne"; -"simulation_variables_placeholder" = "Później będą tu pokazywane aktualne wartości zmiennych."; +"simulation_variables_placeholder" = "Brak zmiennych."; "simulation_output" = "Wyjście"; -"simulation_output_placeholder" = "Później pojawi się tu wyjście symulacji."; +"simulation_output_placeholder" = "Brak wyjścia."; "action_delete_selection" = "Usuń zaznaczenie"; "ctx_copy" = "Kopiuj"; "ctx_cut" = "Wytnij"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings index 670a3410..d53f3d0e 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Introduza um número inteiro."; "simulation_trace" = "Último passo"; -"simulation_trace_placeholder" = "O último passo executado será explicado aqui."; +"simulation_trace_placeholder" = "Ainda não foi executado nenhum passo."; "simulation_variables" = "Variáveis"; -"simulation_variables_placeholder" = "Os valores atuais das variáveis serão mostrados aqui mais tarde."; +"simulation_variables_placeholder" = "Ainda não há variáveis."; "simulation_output" = "Saída"; -"simulation_output_placeholder" = "A saída da simulação aparecerá aqui mais tarde."; +"simulation_output_placeholder" = "Ainda não há saída."; "action_delete_selection" = "Eliminar seleção"; "ctx_copy" = "Copiar"; "ctx_cut" = "Cortar"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings index 063a0547..77826860 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Введите целое число."; "simulation_trace" = "Последний шаг"; -"simulation_trace_placeholder" = "Здесь будет объясняться последний выполненный шаг."; +"simulation_trace_placeholder" = "Ещё не выполнено ни одного шага."; "simulation_variables" = "Переменные"; -"simulation_variables_placeholder" = "Текущие значения переменных будут показаны здесь позже."; +"simulation_variables_placeholder" = "Переменных пока нет."; "simulation_output" = "Вывод"; -"simulation_output_placeholder" = "Вывод симуляции появится здесь позже."; +"simulation_output_placeholder" = "Вывода пока нет."; "action_delete_selection" = "Удалить выделение"; "ctx_copy" = "Копировать"; "ctx_cut" = "Вырезать"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings index efe91c52..72c36fa9 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Ange ett heltal."; "simulation_trace" = "Senaste steg"; -"simulation_trace_placeholder" = "Det senast körda steget förklaras här."; +"simulation_trace_placeholder" = "Inget steg har körts ännu."; "simulation_variables" = "Variabler"; -"simulation_variables_placeholder" = "Aktuella variabelvärden visas här senare."; +"simulation_variables_placeholder" = "Inga variabler ännu."; "simulation_output" = "Utdata"; -"simulation_output_placeholder" = "Simuleringens utdata visas här senare."; +"simulation_output_placeholder" = "Ingen utmatning ännu."; "action_delete_selection" = "Radera markering"; "ctx_copy" = "Kopiera"; "ctx_cut" = "Klipp ut"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings index b91aab60..1cdb3df8 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Lütfen bir tam sayı girin."; "simulation_trace" = "Son Adım"; -"simulation_trace_placeholder" = "Son çalıştırılan adım burada açıklanacak."; +"simulation_trace_placeholder" = "Henüz adım çalıştırılmadı."; "simulation_variables" = "Değişkenler"; -"simulation_variables_placeholder" = "Geçerli değişken değerleri daha sonra burada gösterilecek."; +"simulation_variables_placeholder" = "Henüz değişken yok."; "simulation_output" = "Çıktı"; -"simulation_output_placeholder" = "Simülasyon çıktısı daha sonra burada görünecek."; +"simulation_output_placeholder" = "Henüz çıktı yok."; "action_delete_selection" = "Seçimi sil"; "ctx_copy" = "Kopyala"; "ctx_cut" = "Kes"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings index f60988e7..7343726c 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "Введіть ціле число."; "simulation_trace" = "Останній крок"; -"simulation_trace_placeholder" = "Тут буде пояснено останній виконаний крок."; +"simulation_trace_placeholder" = "Ще не виконано жодного кроку."; "simulation_variables" = "Змінні"; -"simulation_variables_placeholder" = "Поточні значення змінних буде показано тут пізніше."; +"simulation_variables_placeholder" = "Змінних поки немає."; "simulation_output" = "Вивід"; -"simulation_output_placeholder" = "Вивід симуляції з’явиться тут пізніше."; +"simulation_output_placeholder" = "Виведення поки немає."; "action_delete_selection" = "Видалити вибране"; "ctx_copy" = "Копіювати"; "ctx_cut" = "Вирізати"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings index 3499e86f..800d1634 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "请输入一个整数。"; "simulation_trace" = "上一步"; -"simulation_trace_placeholder" = "这里将说明最后执行的步骤。"; +"simulation_trace_placeholder" = "尚未执行任何步骤。"; "simulation_variables" = "变量"; -"simulation_variables_placeholder" = "当前变量值稍后会显示在这里。"; +"simulation_variables_placeholder" = "暂无变量。"; "simulation_output" = "输出"; -"simulation_output_placeholder" = "模拟输出稍后会显示在这里。"; +"simulation_output_placeholder" = "暂无输出。"; "action_delete_selection" = "删除所选"; "ctx_copy" = "复制"; "ctx_cut" = "剪切"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings index d634972b..6a8739e4 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings @@ -23,11 +23,11 @@ "simulation_input_submit" = "OK"; "simulation_input_invalid_int" = "請輸入一個整數。"; "simulation_trace" = "上一步"; -"simulation_trace_placeholder" = "這裡會說明最後執行的步驟。"; +"simulation_trace_placeholder" = "尚未執行任何步驟。"; "simulation_variables" = "變數"; -"simulation_variables_placeholder" = "目前的變數值稍後會顯示在這裡。"; +"simulation_variables_placeholder" = "暫無變數。"; "simulation_output" = "輸出"; -"simulation_output_placeholder" = "模擬輸出稍後會顯示在這裡。"; +"simulation_output_placeholder" = "暫無輸出。"; "action_delete_selection" = "刪除選取項目"; "ctx_copy" = "複製"; "ctx_cut" = "剪下";