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 3fb7cf29038586f928850077a19982febad50697 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 19 Oct 2026 06:56:01 +0000 Subject: [PATCH 2/2] iPhone: palette as sheet, compact title row, inspector starts collapsed - The palette opens as a sheet (medium/large, diagram stays usable) instead of sitting above the navigation bar; it opens by itself when an insert position is picked and closes after inserting. - The title field is a single tappable line; editing happens in a small dialog. - The inspector starts collapsed and gets a "Collapse" button when open. - iPad and Mac are unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01Cp4EQgFQyGbM8MVLiWbJKQ --- .../VisuStruct/ContentView.swift | 104 +++++++++++++++--- .../Inspector/InspectorPanelViews.swift | 12 +- .../VisuStruct/ar.lproj/Localizable.strings | 2 + .../VisuStruct/da.lproj/Localizable.strings | 2 + .../VisuStruct/de.lproj/Localizable.strings | 2 + .../VisuStruct/el.lproj/Localizable.strings | 2 + .../VisuStruct/en.lproj/Localizable.strings | 2 + .../VisuStruct/es.lproj/Localizable.strings | 2 + .../VisuStruct/fr.lproj/Localizable.strings | 2 + .../VisuStruct/he.lproj/Localizable.strings | 2 + .../VisuStruct/it.lproj/Localizable.strings | 2 + .../VisuStruct/ja.lproj/Localizable.strings | 2 + .../VisuStruct/ko.lproj/Localizable.strings | 2 + .../VisuStruct/nb.lproj/Localizable.strings | 2 + .../VisuStruct/nl.lproj/Localizable.strings | 2 + .../VisuStruct/pl.lproj/Localizable.strings | 2 + .../pt-PT.lproj/Localizable.strings | 2 + .../VisuStruct/ru.lproj/Localizable.strings | 2 + .../VisuStruct/sv.lproj/Localizable.strings | 2 + .../VisuStruct/tr.lproj/Localizable.strings | 2 + .../VisuStruct/uk.lproj/Localizable.strings | 2 + .../zh-Hans.lproj/Localizable.strings | 2 + .../zh-Hant.lproj/Localizable.strings | 2 + 23 files changed, 139 insertions(+), 19 deletions(-) diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ContentView.swift b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ContentView.swift index bd0d80f7..de21d410 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ContentView.swift +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ContentView.swift @@ -57,9 +57,14 @@ struct ContentView: View { } // iPhone UX: Einfügemarke + Inspector einklappen beim Einfügen. @State private var insertTarget: DiagramInsertTarget? = nil - @State private var hideInspectorOnPhone: Bool = false + /// iPhone: Inspector startet eingeklappt, damit das Diagramm Platz hat. + @State private var hideInspectorOnPhone: Bool = true // iPhone UX: Palette automatisch einklappen beim Text-Editieren. - @State private var showPaletteOnPhone: Bool = true + /// iPhone: Palette als Sheet über dem Editor (statt fest über der Navigationsleiste). + @State private var showPaletteOnPhone: Bool = false + /// iPhone: Diagrammtitel wird in einem kleinen Dialog bearbeitet statt in einem eigenen Feld über dem Diagramm. + @State private var showPhoneTitleEditor: Bool = false + @State private var phoneTitleDraft: String = "" // In-App Zwischenablage für Diagramm-Elemente (Copy/Cut/Paste). @State private var elementClipboard: VisuStructElement? = nil #if canImport(UIKit) @@ -177,7 +182,7 @@ struct ContentView: View { .navigationSplitViewStyle(.balanced) } else { VStack(spacing: 0) { - if !isPhone || showPaletteOnPhone { + if !isPhone { paletteListPanel .frame(maxHeight: 300, alignment: .top) .background(Color(.secondarySystemGroupedBackground)) @@ -187,6 +192,14 @@ struct ContentView: View { mainEditorNavigationStack .frame(maxWidth: .infinity, maxHeight: .infinity) } + .sheet(isPresented: phonePaletteSheetBinding) { + paletteListPanel + .environment(\.appLanguage, lang) + .presentationDetents([.medium, .large]) + // Diagramm bleibt bedienbar, z. B. um eine Einfügestelle zu wählen. + .presentationBackgroundInteraction(.enabled(upThrough: .medium)) + .presentationDragIndicator(.visible) + } } } #if canImport(UIKit) @@ -346,6 +359,11 @@ struct ContentView: View { refreshLineEditor() DiagramCommandCenter.shared.update(file: diagramFileActions, edit: diagramEditActions) } + .onChange(of: insertTarget) { _, newTarget in + // iPhone: Einfügestelle gewählt → Palette öffnen, damit gleich ein Element gewählt werden kann. + guard isPhone, newTarget != nil else { return } + showPaletteOnPhone = true + } .onChange(of: focusedField) { _, newVal in // iPhone: Sobald Textbearbeitung startet, Palette einklappen für mehr Platz. guard isPhone else { return } @@ -881,21 +899,25 @@ struct ContentView: View { let blockCorner: CGFloat = horizontalSizeClass == .regular ? 14 : 12 return VStack(alignment: .leading, spacing: 0) { - VStack(alignment: .leading, spacing: 8) { - Text(lang.tr("diagram_title_label")) - .font(horizontalSizeClass == .regular ? .caption : .subheadline) - .foregroundStyle(.secondary) - TextField(lang.tr("diagram_title_placeholder"), text: captionBinding) - .font(horizontalSizeClass == .regular ? .subheadline : .body) - .textFieldStyle(.roundedBorder) - .textInputAutocapitalization(.never) - .autocorrectionDisabled(true) - .focused($focusedField, equals: .caption) + if isPhone { + phoneCaptionRow + } else { + VStack(alignment: .leading, spacing: 8) { + Text(lang.tr("diagram_title_label")) + .font(horizontalSizeClass == .regular ? .caption : .subheadline) + .foregroundStyle(.secondary) + TextField(lang.tr("diagram_title_placeholder"), text: captionBinding) + .font(horizontalSizeClass == .regular ? .subheadline : .body) + .textFieldStyle(.roundedBorder) + .textInputAutocapitalization(.never) + .autocorrectionDisabled(true) + .focused($focusedField, equals: .caption) + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal, 14) + .padding(.top, 8) + .padding(.bottom, 6) } - .frame(maxWidth: .infinity, alignment: .leading) - .padding(.horizontal, 14) - .padding(.top, 8) - .padding(.bottom, 6) // Innerer Trennstrich — Titel zählt zum Diagramm-„Blatt“, nicht als losgelöster Bereich oberhalb. Rectangle() .fill(Color.primary.opacity(0.1)) @@ -935,6 +957,47 @@ struct ContentView: View { } } + /// iPhone: Titel als eine kompakte Zeile; Tippen öffnet einen Dialog zum Bearbeiten. + private var phoneCaptionRow: some View { + Button { + phoneTitleDraft = document.caption + showPhoneTitleEditor = true + } label: { + HStack(spacing: 6) { + Text(document.caption.isEmpty ? lang.tr("diagram_title_placeholder") : document.caption) + .font(.subheadline.weight(.semibold)) + .foregroundStyle(document.caption.isEmpty ? .secondary : .primary) + .lineLimit(1) + Image(systemName: "pencil") + .font(.caption) + .foregroundStyle(.secondary) + } + .frame(maxWidth: .infinity, alignment: .leading) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .accessibilityLabel(lang.tr("diagram_title_label")) + .padding(.horizontal, 14) + .padding(.vertical, 8) + .alert(lang.tr("diagram_title_label"), isPresented: $showPhoneTitleEditor) { + TextField(lang.tr("diagram_title_placeholder"), text: $phoneTitleDraft) + .textInputAutocapitalization(.never) + .autocorrectionDisabled(true) + Button(lang.tr("phone_title_done")) { + if phoneTitleDraft != document.caption { + captionBinding.wrappedValue = phoneTitleDraft + } + } + } + } + + private var phonePaletteSheetBinding: Binding { + Binding( + get: { isPhone && showPaletteOnPhone }, + set: { showPaletteOnPhone = $0 } + ) + } + // MARK: - Bindings (Dokument, Caption) private var documentBinding: Binding { @@ -1494,7 +1557,11 @@ struct ContentView: View { insertTargetActive: insertTarget != nil, hideInspectorOnPhone: hideInspectorOnPhone, onCancelInsert: { insertTarget = nil }, - onShowInspector: { hideInspectorOnPhone = false } + onShowInspector: { hideInspectorOnPhone = false }, + onHideInspector: { + focusedField = nil + hideInspectorOnPhone = true + } ) { inspectorPanel } @@ -1845,6 +1912,7 @@ struct ContentView: View { private func insertPaletteItem(_ item: ElementPalette.PaletteItem) { if isPhone { hideInspectorOnPhone = true + showPaletteOnPhone = false } let el = ElementPalette.element(for: item, lang: lang) let doc = document diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Inspector/InspectorPanelViews.swift b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Inspector/InspectorPanelViews.swift index 223e214a..f2dd8860 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Inspector/InspectorPanelViews.swift +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Inspector/InspectorPanelViews.swift @@ -190,6 +190,7 @@ struct InspectorPhoneChrome: View { let hideInspectorOnPhone: Bool let onCancelInsert: () -> Void let onShowInspector: () -> Void + let onHideInspector: () -> Void @ViewBuilder let inspector: () -> Inspector var body: some View { @@ -211,7 +212,16 @@ struct InspectorPhoneChrome: View { } .buttonStyle(.bordered) } else { - inspector() + VStack(alignment: .trailing, spacing: 4) { + Button { + onHideInspector() + } label: { + Label(lang.tr("phone_hide_text_editor"), systemImage: "chevron.down") + .font(.subheadline) + } + .buttonStyle(.borderless) + inspector() + } } } } diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings index 947183e1..7de68b3a 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings @@ -194,6 +194,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "إلغاء الإدراج"; "phone_show_text_editor" = "تحرير النص"; +"phone_hide_text_editor" = "طيّ"; +"phone_title_done" = "تم"; /* Alerts */ "err_save_failed_fmt" = "تعذر الحفظ: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings index 45ceaa25..f48616bd 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings @@ -140,3 +140,5 @@ "sim_notice_division_by_zero" = "Division med nul."; "sim_notice_whole_number_expected" = "Indtast et heltal."; "sim_notice_number_expected" = "Indtast et tal."; +"phone_hide_text_editor" = "Skjul"; +"phone_title_done" = "Færdig"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings index 5aa7d433..66f3ee14 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings @@ -211,6 +211,8 @@ /* iPhone: Einfügen per Tap */ "phone_insert_cancel" = "Einfügen abbrechen"; "phone_show_text_editor" = "Text bearbeiten"; +"phone_hide_text_editor" = "Einklappen"; +"phone_title_done" = "Fertig"; /* Meldungen */ "err_save_failed_fmt" = "Speichern fehlgeschlagen: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings index a934b1e5..1f64ce79 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings @@ -191,6 +191,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "Ακύρωση εισαγωγής"; "phone_show_text_editor" = "Επεξεργασία κειμένου"; +"phone_hide_text_editor" = "Σύμπτυξη"; +"phone_title_done" = "Τέλος"; /* Alerts */ "err_save_failed_fmt" = "Δεν ήταν δυνατή η αποθήκευση: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings index 3bfe1d99..ba231b9f 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings @@ -211,6 +211,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "Cancel insert"; "phone_show_text_editor" = "Edit text"; +"phone_hide_text_editor" = "Collapse"; +"phone_title_done" = "Done"; /* Alerts */ "err_save_failed_fmt" = "Could not save: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings index 6a571754..d0074407 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings @@ -194,6 +194,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "Cancelar inserción"; "phone_show_text_editor" = "Editar texto"; +"phone_hide_text_editor" = "Contraer"; +"phone_title_done" = "Listo"; /* Alerts */ "err_save_failed_fmt" = "No se pudo guardar: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings index e75ac72b..007a5a4c 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings @@ -194,6 +194,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "Annuler l’insertion"; "phone_show_text_editor" = "Modifier le texte"; +"phone_hide_text_editor" = "Réduire"; +"phone_title_done" = "OK"; /* Alerts */ "err_save_failed_fmt" = "Impossible d’enregistrer : %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings index a572f20d..18899846 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings @@ -194,6 +194,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "בטל הוספה"; "phone_show_text_editor" = "עריכת טקסט"; +"phone_hide_text_editor" = "כיווץ"; +"phone_title_done" = "סיום"; /* Alerts */ "err_save_failed_fmt" = "לא ניתן לשמור: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings index 1038f1c0..47eb1d9a 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings @@ -194,6 +194,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "Annulla inserimento"; "phone_show_text_editor" = "Modifica testo"; +"phone_hide_text_editor" = "Comprimi"; +"phone_title_done" = "Fine"; /* Alerts */ "err_save_failed_fmt" = "Impossibile salvare: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings index 410ae8ad..2f2adeed 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings @@ -194,6 +194,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "挿入をキャンセル"; "phone_show_text_editor" = "テキストを編集"; +"phone_hide_text_editor" = "折りたたむ"; +"phone_title_done" = "完了"; /* Alerts */ "err_save_failed_fmt" = "保存できませんでした:%@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings index bbb00f9c..9d4a723d 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings @@ -194,6 +194,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "삽입 취소"; "phone_show_text_editor" = "텍스트 편집"; +"phone_hide_text_editor" = "접기"; +"phone_title_done" = "완료"; /* Alerts */ "err_save_failed_fmt" = "저장할 수 없음: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings index 3d7b785e..d2e71d74 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings @@ -140,3 +140,5 @@ "sim_notice_division_by_zero" = "Divisjon med null."; "sim_notice_whole_number_expected" = "Skriv inn et heltall."; "sim_notice_number_expected" = "Skriv inn et tall."; +"phone_hide_text_editor" = "Skjul"; +"phone_title_done" = "Ferdig"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings index 67a50b87..e4960400 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings @@ -140,3 +140,5 @@ "sim_notice_division_by_zero" = "Deling door nul."; "sim_notice_whole_number_expected" = "Voer een geheel getal in."; "sim_notice_number_expected" = "Voer een getal in."; +"phone_hide_text_editor" = "Inklappen"; +"phone_title_done" = "Gereed"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings index 51af815d..9e6759ff 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings @@ -194,6 +194,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "Anuluj wstawianie"; "phone_show_text_editor" = "Edytuj tekst"; +"phone_hide_text_editor" = "Zwiń"; +"phone_title_done" = "Gotowe"; /* Alerts */ "err_save_failed_fmt" = "Nie można zapisać: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings index d53f3d0e..38e308a0 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings @@ -196,6 +196,8 @@ /* iPhone: inserir por toque */ "phone_insert_cancel" = "Cancelar inserção"; "phone_show_text_editor" = "Editar texto"; +"phone_hide_text_editor" = "Recolher"; +"phone_title_done" = "OK"; /* Alertas */ "err_save_failed_fmt" = "Não foi possível guardar: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings index 77826860..6d1fe836 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings @@ -193,6 +193,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "Отменить вставку"; "phone_show_text_editor" = "Редактировать текст"; +"phone_hide_text_editor" = "Свернуть"; +"phone_title_done" = "Готово"; /* Alerts */ "err_save_failed_fmt" = "Не удалось сохранить: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings index 72c36fa9..700b4834 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings @@ -140,3 +140,5 @@ "sim_notice_division_by_zero" = "Division med noll."; "sim_notice_whole_number_expected" = "Ange ett heltal."; "sim_notice_number_expected" = "Ange ett tal."; +"phone_hide_text_editor" = "Fäll ihop"; +"phone_title_done" = "Klar"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings index 1cdb3df8..8a5d25a1 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings @@ -194,6 +194,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "Ekleme iptal"; "phone_show_text_editor" = "Metni düzenle"; +"phone_hide_text_editor" = "Daralt"; +"phone_title_done" = "Bitti"; /* Alerts */ "err_save_failed_fmt" = "Kaydedilemedi: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings index 7343726c..f72521ed 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings @@ -191,6 +191,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "Скасувати вставку"; "phone_show_text_editor" = "Редагувати текст"; +"phone_hide_text_editor" = "Згорнути"; +"phone_title_done" = "Готово"; /* Alerts */ "err_save_failed_fmt" = "Не вдалося зберегти: %@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings index 800d1634..c69f796d 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings @@ -194,6 +194,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "取消插入"; "phone_show_text_editor" = "编辑文本"; +"phone_hide_text_editor" = "收起"; +"phone_title_done" = "完成"; /* Alerts */ "err_save_failed_fmt" = "无法保存:%@"; diff --git a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings index 6a8739e4..ed330569 100644 --- a/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings +++ b/VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings @@ -194,6 +194,8 @@ /* iPhone: tap-to-insert */ "phone_insert_cancel" = "取消插入"; "phone_show_text_editor" = "編輯文字"; +"phone_hide_text_editor" = "收合"; +"phone_title_done" = "完成"; /* Alerts */ "err_save_failed_fmt" = "無法儲存:%@";