From 4ececa8d51f6f61fa49950dafe685a4eca364fe4 Mon Sep 17 00:00:00 2001 From: Fran Dieguez Date: Thu, 5 May 2022 09:44:29 +0000 Subject: [PATCH 001/134] Update Galician translation --- po/gl.po | 472 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 289 insertions(+), 183 deletions(-) diff --git a/po/gl.po b/po/gl.po index 8ac9fb5..1d7df16 100644 --- a/po/gl.po +++ b/po/gl.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the apostrophe package. # FIRST AUTHOR , YEAR. # Fran Diéguez , 2022. +# Fran Dieguez , 2022. # msgid "" msgstr "" "Project-Id-Version: apostrophe main\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/apostrophe/issues\n" -"POT-Creation-Date: 2022-01-31 17:08+0000\n" -"PO-Revision-Date: 2022-02-03 19:14+0100\n" -"Last-Translator: Fran Diéguez \n" -"Language-Team: Galician \n" +"POT-Creation-Date: 2022-03-07 19:03+0000\n" +"PO-Revision-Date: 2022-05-05 11:41+0200\n" +"Last-Translator: Fran Dieguez \n" +"Language-Team: Galician >\n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,101 +23,131 @@ msgstr "" "X-DL-Domain: po\n" "X-DL-State: Translating\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"X-Generator: Gtranslator 41.0\n" +"X-Generator: Gtranslator 40.0\n" #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:3 #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:5 msgid "Apostrophe" msgstr "Apóstrofe" -#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! +#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! Do NOT translate "uberwriter" or "apostrophe"! The list MUST also end with a semicolon! #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:5 -msgid "uberwriter;UberWriter;apostrophe;markdown;editor;" -msgstr "uberwriter;UberWriter;apóstrofe;markdown;editor;" +#| msgid "uberwriter;UberWriter;apostrophe;markdown;editor;" +msgid "uberwriter;UberWriter;apostrophe;markdown;editor;text;write;" +msgstr "uberwriter;UberWriter;apóstrofe;markdown;editor;texto;escribir;" #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:6 msgid "Apostrophe, an elegant, distraction-free markdown editor" msgstr "Apóstrofe, un editor de markdown elegente e sen distracións" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:28 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 msgid "Color scheme" msgstr "Esquema de cor" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:30 msgid "Use the color scheme in the application's UI and in the text area." msgstr "Usar o esquema de cor na interface da aplicación e no área de texto." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:35 -#: data/ui/Preferences.ui:49 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 +#: data/ui/Preferences.ui:23 data/ui/Preferences.ui:24 msgid "Check spelling while typing" msgstr "Verificación ortográfica mentres se escribe " -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:37 msgid "Enable or disable spellchecking." msgstr "Activar ou desactivar a verificación ortográfica" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:42 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:43 msgid "Synchronize editor/preview scrolling" msgstr "Sincronizar o desprazamento do editor/previsualización" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:43 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:44 msgid "Keep the editor and preview scroll positions in sync." msgstr "" "Manter sincronizadas as posicións de desprazamento do editor e previsuación." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:49 -#: data/ui/Preferences.ui:73 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 +#: data/ui/Preferences.ui:90 msgid "Input format" msgstr "Formato de entrada" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:51 msgid "Input format to use when previewing and exporting using Pandoc." msgstr "" "O formato de entrada a usar cando se previsualiza e exporta usando Pandoc." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:56 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 msgid "Autohide Headerbar" msgstr "Autoocultar barra de cabeceira" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:58 msgid "Hide the header and status bars when typing." msgstr "Ocultar as barras de estado e cabeceira mentres se escribe." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:63 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:64 msgid "Open file base path" msgstr "Abrir a ruta base do ficheiro" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:64 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:65 msgid "Open file paths of the current session" msgstr "Abrir as rutas do ficheiro da sesión actual" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:70 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 msgid "Default statistic" msgstr "Estatísticas predeterminadas" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:72 msgid "Which statistic is shown on the main window." msgstr "Indica se a estatística se mostra na xanela principal." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:77 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:78 msgid "Characters per line" msgstr "Caracteres por liña" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:78 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:79 msgid "Maximum number of characters per line within the editor." msgstr "Número máximo dos caracteres por liña no editor." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:84 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 +#: data/ui/Headerbar.ui:250 +msgid "Hemingway Mode" +msgstr "Modo Hemingway" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:86 +msgid "Whether the user can delete text or not." +msgstr "Indica se o usuario pode eliminar texto ou non." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:92 msgid "Preview mode" msgstr "Modo de previsualización" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:93 msgid "How to display the preview." msgstr "Como mostrar a previsualización" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:99 +#| msgid "Preview mode" +msgid "Preview active" +msgstr "Previsualización activa" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:100 +msgid "Whether showing of preview is active when launching a new window." +msgstr "" +"Indica se está activo mostran as previsualizacións ao iniciar unha nova " +"xanela." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:106 +msgid "Text size" +msgstr "Tamaño de texto" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:107 +msgid "Preferred relative size for the text." +msgstr "Tamaño relativo preferido para o texto." + #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:6 -msgid "An elegant, distraction-free markdown editor" -msgstr "Un editor de markdown elegante e sen distraccións" +#| msgid "Markdown Files" +msgid "Edit Markdown in style" +msgstr "Editar o Markdown en estilo" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:8 msgid "Focus on your writing with a clean, distraction-free markdown editor." @@ -160,12 +191,13 @@ msgstr "" "incluso presentacións HTML" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:41 -msgid "Wolf V., Manuel G." -msgstr "Wolf V., Manuel G." +msgid "Manuel G., Wolf V." +msgstr "Manuel G., Wolf V." #: data/ui/About.ui.in:12 -msgid "Copyright (C) 2020, Wolf Vollprecht" -msgstr "Copyright (C) 2020, Wolf Vollprecht" +#| msgid "Copyright (C) 2020, Wolf Vollprecht" +msgid "Copyright (C) 2022, Manuel G., Wolf V." +msgstr "Copyright (C) 2022, Manuel G., Wolf V." #: data/ui/About.ui.in:14 msgid "Apostrophe website" @@ -190,38 +222,26 @@ msgid "Help to translate:" msgstr "Axude a traducir:" #: data/ui/About.ui.in:114 -msgid "Poeditor" -msgstr "Poeditor" - -#: data/ui/ExportPopover.ui:19 -msgid "Save As…" -msgstr "Gardar como…" - -#: data/ui/ExportPopover.ui:100 -msgid "Advanced Export…" -msgstr "Exportar avanzado…" - -#: data/ui/ExportPopover.ui:125 -msgid "Copy HTML" -msgstr "Copiar HTML" +msgid "Damned Lies" +msgstr "Damned Lies" -#: data/ui/Export.ui:47 apostrophe/export_dialog.py:133 +#: data/ui/Export.ui:46 apostrophe/export_dialog.py:133 #: apostrophe/export_dialog.py:324 apostrophe/export_dialog.py:329 -#: apostrophe/main_window.py:344 apostrophe/main_window.py:435 -#: apostrophe/main_window.py:508 +#: apostrophe/main_window.py:331 apostrophe/main_window.py:424 +#: apostrophe/main_window.py:509 msgid "Cancel" msgstr "Cancelar" -#: data/ui/Export.ui:62 apostrophe/export_dialog.py:128 +#: data/ui/Export.ui:61 apostrophe/export_dialog.py:128 #: apostrophe/export_dialog.py:323 apostrophe/export_dialog.py:327 msgid "Export" msgstr "Exportar " -#: data/ui/Export.ui:154 +#: data/ui/Export.ui:153 msgid "Standalone" msgstr "Autónomo" -#: data/ui/Export.ui:156 +#: data/ui/Export.ui:155 msgid "" "Use a header and footer to include things like stylesheets and meta " "information" @@ -229,142 +249,204 @@ msgstr "" "Usar unha cabecdeira e pé de páxina para incluir cousas como follas de " "estilo e metainformación" -#: data/ui/Export.ui:171 +#: data/ui/Export.ui:170 msgid "Table of Contents" msgstr "Táboa de contidos" -#: data/ui/Export.ui:187 +#: data/ui/Export.ui:186 msgid "Number Sections" msgstr "Número de seccións" -#: data/ui/Export.ui:211 data/ui/Export.ui:217 +#: data/ui/Export.ui:210 data/ui/Export.ui:216 msgid "Page Size" msgstr "Tamaño da páxina" -#: data/ui/Export.ui:236 +#: data/ui/Export.ui:235 msgid "HTML Options" msgstr "Opcións de HTML" -#: data/ui/Export.ui:242 +#: data/ui/Export.ui:241 msgid "Self-contained" msgstr "Autocontido" -#: data/ui/Export.ui:244 +#: data/ui/Export.ui:243 msgid "Produces an HTML file with no external dependencies" msgstr "Produce un ficheiro HTML sen ningunha dependencia externa" -#: data/ui/Export.ui:260 +#: data/ui/Export.ui:259 msgid "CSS File" msgstr "Ficheiro CSS" -#: data/ui/Export.ui:265 +#: data/ui/Export.ui:264 msgid "Select CSS file" msgstr "Seleccione un ficheiro CSS" -#: data/ui/Export.ui:286 +#: data/ui/Export.ui:285 msgid "Syntax Highlighting" msgstr "Realzado de sintaxe" -#: data/ui/Export.ui:301 +#: data/ui/Export.ui:300 msgid "Highlight style" msgstr "Estilo de realce" -#: data/ui/Export.ui:322 +#: data/ui/Export.ui:321 msgid "Presentation" msgstr "Presentación" -#: data/ui/Export.ui:328 +#: data/ui/Export.ui:327 msgid "Incremental bullets" msgstr "Viñetas incrementais" -#: data/ui/Export.ui:330 +#: data/ui/Export.ui:329 msgid "Show one bullet point after another in a slideshow" msgstr "Mostrar un punto de viñeta despois de outro nunha presentación" -#: data/ui/Export.ui:357 -msgid "page0" -msgstr "páxina0" - -#: data/ui/Export.ui:365 -msgid "page1" -msgstr "páxina1" - -#: data/ui/Headerbar.ui:130 -msgid "Sync Views" -msgstr "Sincronizar vistas" - -#: data/ui/Headerbar.ui:171 +#: data/ui/Headerbar.ui:57 msgid "New" msgstr "Novo" -#: data/ui/Headerbar.ui:182 apostrophe/main_window.py:434 +#: data/ui/Headerbar.ui:67 apostrophe/main_window.py:423 msgid "Open" msgstr "Abrir" -#: data/ui/Headerbar.ui:199 -msgid "Open Recent" -msgstr "Abrir recentes" - -#: data/ui/Headerbar.ui:225 apostrophe/main_window.py:343 +#: data/ui/Headerbar.ui:90 apostrophe/main_window.py:330 msgid "Save" msgstr "Gardar" -#: data/ui/Headerbar.ui:242 +#: data/ui/Headerbar.ui:102 msgid "Save as…" msgstr "Gardar como…" -#: data/ui/Headerbar.ui:283 +#: data/ui/Headerbar.ui:140 msgid "Menu" msgstr "Menú" -#: data/ui/Headerbar.ui:305 apostrophe/preview_renderer.py:47 -msgid "Preview" -msgstr "Vista previa" - -#: data/ui/Headerbar.ui:378 +#: data/ui/Headerbar.ui:166 msgid "Find" msgstr "Buscar" -#: data/ui/Menu.ui:43 -msgid "Hemingway Mode" -msgstr "Modo Hemingway" +#: data/ui/Headerbar.ui:225 +#| msgid "Windowed" +msgid "New Window" +msgstr "Nova xanela" -#: data/ui/Menu.ui:57 +#: data/ui/Headerbar.ui:264 msgid "Focus Mode" msgstr "Modo enfocado" -#: data/ui/Menu.ui:82 +#: data/ui/Headerbar.ui:289 msgid "Find and Replace" msgstr "Buscar e substituír" -#: data/ui/Menu.ui:107 data/ui/Preferences.ui:19 +#: data/ui/Headerbar.ui:314 msgid "Preferences" msgstr "Preferencias" -#: data/ui/Menu.ui:132 +#: data/ui/Headerbar.ui:339 msgid "Open Tutorial" msgstr "Abrir titorial" -#: data/ui/Menu.ui:146 +#: data/ui/Headerbar.ui:353 msgid "Keyboard Shortcuts" msgstr "Atallos de teclado" -#: data/ui/Menu.ui:160 +#: data/ui/Headerbar.ui:367 msgid "About Apostrophe" msgstr "Sobre Apóstrofe" -#: data/ui/Preferences.ui:110 -msgid "Autohide header and statusbars while typing" -msgstr "Ocultar automaticamente as barras de cabeceira e estado ao escribir" +#: data/ui/Headerbar.ui:395 +msgid "Save As…" +msgstr "Gardar como…" + +#: data/ui/Headerbar.ui:476 +msgid "Advanced Export…" +msgstr "Exportar avanzado…" -#: data/ui/Preferences.ui:112 +#: data/ui/Headerbar.ui:501 +msgid "Copy HTML" +msgstr "Copiar HTML" + +#: data/ui/Preferences.ui:40 msgid "Autohide headerbar" msgstr "Autoocultar barra de cabeceira" -#: data/ui/PreviewLayoutSwitcherItem.ui:36 apostrophe/headerbars.py:126 -#: apostrophe/preview_renderer.py:132 -msgid "Full-Width" -msgstr "Ancho completo" +#: data/ui/Preferences.ui:41 +msgid "Autohide header and statusbars while typing" +msgstr "Ocultar automaticamente as barras de cabeceira e estado ao escribir" + +#: data/ui/Preferences.ui:57 +msgid "Use bigger text" +msgstr "Usar texto máis grande" + +#: data/ui/Preferences.ui:58 +msgid "Reduce the margins width and increase the text size when possible" +msgstr "" +"Reduce o ancho dos marxes para incrementar o tamaño de texto cando sexa " +"posíbel" + +#: data/ui/Preferences.ui:72 +#| msgid "Regular Expression" +msgid "Restore session" +msgstr "Restaurar sesión" + +#: data/ui/Preferences.ui:73 +msgid "Return to your previous session when Apostrophe is started" +msgstr "Volver á súa anterior sesión cando Apostrophe inicie" + +#: data/ui/Preferences.ui:91 +msgid "Flavor of markdown Apostrophe will use" +msgstr "Variedade da documentación que usará Apostrophe" + +#: data/ui/Preferences.ui:100 +msgid "Markdown flavor documentation" +msgstr "Variedde da documentación de Markdown" + +#: data/ui/PreviewLayoutSwitcher.ui:10 data/ui/PreviewWindow.ui:13 +msgid "Preview" +msgstr "Vista previa" + +#: data/ui/PreviewLayoutSwitcher.ui:32 +msgid "Screen Layout" +msgstr "Disposición da pantalla" + +#: data/ui/Recents.ui:60 +#| msgctxt "shortcut window" +#| msgid "Close document" +msgid "No Recent Documents" +msgstr "Non hai documentos recentes" + +#: data/ui/Recents.ui:88 +msgid "No Results Found" +msgstr "Non se atoparon resultados" + +#: data/ui/SearchBar.ui:50 +msgid "Previous Match" +msgstr "Coincidencia anterior" + +#: data/ui/SearchBar.ui:63 +msgid "Next Match" +msgstr "Coincidencia seguinte" + +#. Translators: This indicates case sensitivity, so it should be the first vowel of the language in lowercase and uppercase +#: data/ui/SearchBar.ui:85 +msgid "aA" +msgstr "aA" + +#: data/ui/SearchBar.ui:89 +msgid "Case Sensitive" +msgstr "Coincidir capitalización" + +#: data/ui/SearchBar.ui:99 +msgid "Regular Expression" +msgstr "Expresión regular" + +#: data/ui/SearchBar.ui:111 data/ui/SearchBar.ui:165 +msgid "Replace" +msgstr "Substituír" + +#: data/ui/SearchBar.ui:175 +msgid "Replace All" +msgstr "Substituír todo" #: data/ui/Shortcuts.ui:13 msgctxt "shortcut window" @@ -511,41 +593,25 @@ msgctxt "shortcut window" msgid "Select all text" msgstr "Seleccionar todo o texto" -#: data/ui/Window.ui:107 -msgid "Show Statistics" -msgstr "Mostrar estatísticas" - -#: data/ui/Window.ui:206 -msgid "Previous Match" -msgstr "Coincidencia anterior" - -#: data/ui/Window.ui:220 -msgid "Next Match" -msgstr "Coincidencia seguinte" - -#: data/ui/Window.ui:249 -msgid "aA" -msgstr "aA" - -#: data/ui/Window.ui:253 -msgid "Case Sensitive" -msgstr "Coincidir capitalización" +#: data/ui/ThemeSwitcher.ui:22 +msgid "Use System Colors" +msgstr "Usar as cores do sistema" -#: data/ui/Window.ui:263 -msgid "(.*)" -msgstr "(.*)" +#: data/ui/ThemeSwitcher.ui:51 +msgid "Use Light Colors" +msgstr "Usar cores claras" -#: data/ui/Window.ui:267 -msgid "Regular Expression" -msgstr "Expresión regular" +#: data/ui/ThemeSwitcher.ui:80 +msgid "Use Sepia Colors" +msgstr "Usar cores sepia" -#: data/ui/Window.ui:280 data/ui/Window.ui:358 -msgid "Replace" -msgstr "Substituír" +#: data/ui/ThemeSwitcher.ui:109 +msgid "Use Dark Colors" +msgstr "Usar cores escuras" -#: data/ui/Window.ui:372 -msgid "Replace All" -msgstr "Substituír todo" +#: data/ui/Window.ui:69 +msgid "Show Statistics" +msgstr "Mostrar estatísticas" #: apostrophe/export_dialog.py:131 apostrophe/export_dialog.py:328 #, python-format @@ -571,104 +637,120 @@ msgstr "Exportar a {}" msgid "Select folder" msgstr "Seleccionar cartafol" -#: apostrophe/headerbars.py:128 apostrophe/preview_renderer.py:134 -msgid "Half-Width" -msgstr "Metade de ancho" - -#: apostrophe/headerbars.py:130 apostrophe/preview_renderer.py:136 -msgid "Half-Height" -msgstr "Metade de alto" - -#: apostrophe/headerbars.py:132 apostrophe/preview_renderer.py:138 -msgid "Windowed" -msgstr "En xanela" - -#: apostrophe/helpers.py:90 +#: apostrophe/helpers.py:89 msgid "Error" msgstr "Erro" -#: apostrophe/inhibitor.py:35 +#: apostrophe/inhibitor.py:36 msgid "Unsaved documents" msgstr "Documentos sen gardar" -#: apostrophe/inline_preview.py:201 +#: apostrophe/inline_preview.py:200 msgid "Formula looks incorrect:" msgstr "A fórmula semella incorrecta:" -#: apostrophe/inline_preview.py:240 +#: apostrophe/inline_preview.py:239 msgid "No matching footnote found" msgstr "Non se atopou unha nota ao pe coincidente" -#: apostrophe/inline_preview.py:260 +#: apostrophe/inline_preview.py:259 msgid "noun" msgstr "nome" -#: apostrophe/inline_preview.py:262 +#: apostrophe/inline_preview.py:261 msgid "verb" msgstr "verbo" -#: apostrophe/inline_preview.py:264 +#: apostrophe/inline_preview.py:263 msgid "adjective" msgstr "adxectivo" -#: apostrophe/inline_preview.py:266 +#: apostrophe/inline_preview.py:265 msgid "adverb" msgstr "adverbio" -#: apostrophe/main_window.py:340 +#: apostrophe/main_window.py:327 msgid "Save your File" msgstr "Gardar a seu ficheiro" -#: apostrophe/main_window.py:424 +#: apostrophe/main_window.py:413 msgid "Markdown Files" msgstr "Ficheiros de Markdown" -#: apostrophe/main_window.py:428 +#: apostrophe/main_window.py:417 msgid "Plain Text Files" msgstr "Ficheiros de texto plano" -#: apostrophe/main_window.py:431 +#: apostrophe/main_window.py:420 msgid "Open a .md file" msgstr "Abrir un ficheiro .md" -#: apostrophe/main_window.py:498 +#: apostrophe/main_window.py:499 #, python-format msgid "Save changes to document “%s” before closing?" msgstr "Desexa gardar os cambios ao documento «%s» antes de pechar?" -#: apostrophe/main_window.py:503 +#: apostrophe/main_window.py:504 msgid "If you don’t save, all your changes will be permanently lost." msgstr "Se non garda, perderánse todos os cambios de forma permanente." -#: apostrophe/main_window.py:506 +#: apostrophe/main_window.py:507 msgid "Close without saving" msgstr "Pechar sen gardar" -#: apostrophe/main_window.py:509 +#: apostrophe/main_window.py:510 msgid "Save now" msgstr "Gardar agora" -#: apostrophe/main_window.py:711 +#: apostrophe/main_window.py:685 msgid "New File" msgstr "Novo ficheiro" -#: apostrophe/stats_handler.py:74 -msgid "{:n} Characters" -msgstr "{:n} caracteres" +#: apostrophe/preview_layout_switcher.py:38 +msgid "Full-Width" +msgstr "Ancho completo" -#: apostrophe/stats_handler.py:76 -msgid "{:n} Words" -msgstr "{:n} palabras" +#: apostrophe/preview_layout_switcher.py:40 +msgid "Half-Width" +msgstr "Metade de ancho" -#: apostrophe/stats_handler.py:78 -msgid "{:n} Sentences" -msgstr "{:n} sentencias" +#: apostrophe/preview_layout_switcher.py:42 +msgid "Half-Height" +msgstr "Metade de alto" -#: apostrophe/stats_handler.py:80 -msgid "{:n} Paragraphs" -msgstr "{:n} parágrafos" +#: apostrophe/preview_layout_switcher.py:44 +msgid "Windowed" +msgstr "En xanela" -#: apostrophe/stats_handler.py:82 +#: apostrophe/stats_handler.py:75 +#| msgid "{:n} Characters" +msgid "{:n} Character" +msgid_plural "{:n} Characters" +msgstr[0] "{:n} caracter" +msgstr[1] "{:n} caracteres" + +#: apostrophe/stats_handler.py:77 +#| msgid "{:n} Words" +msgid "{:n} Word" +msgid_plural "{:n} Words" +msgstr[0] "{:n} palabras" +msgstr[1] "{:n} palabra" + +#: apostrophe/stats_handler.py:79 +#| msgid "{:n} Sentences" +msgid "{:n} Sentence" +msgid_plural "{:n} Sentences" +msgstr[0] "{:n} sentenza" +msgstr[1] "{:n} sentencias" + +#: apostrophe/stats_handler.py:81 +#| msgid "{:n} Paragraphs" +msgid "{:n} Paragraph" +msgid_plural "{:n} Paragraphs" +msgstr[0] "{:n} parágrafo" +msgstr[1] "{:n} parágrafos" + +#: apostrophe/stats_handler.py:83 msgid "{:d}:{:02d}:{:02d} Read Time" msgstr "{:d}:{:02d}:{:02d} tempo de lectura" @@ -696,3 +778,27 @@ msgstr "Elemento" #: apostrophe/text_view_format_inserter.py:98 msgid "Header" msgstr "Cabeceira" + +#~ msgid "An elegant, distraction-free markdown editor" +#~ msgstr "Un editor de markdown elegante e sen distraccións" + +#~ msgid "Wolf V., Manuel G." +#~ msgstr "Wolf V., Manuel G." + +#~ msgid "Poeditor" +#~ msgstr "Poeditor" + +#~ msgid "page0" +#~ msgstr "páxina0" + +#~ msgid "page1" +#~ msgstr "páxina1" + +#~ msgid "Sync Views" +#~ msgstr "Sincronizar vistas" + +#~ msgid "Open Recent" +#~ msgstr "Abrir recentes" + +#~ msgid "(.*)" +#~ msgstr "(.*)" -- 2.40.1 From 9d8c2d0a40556f82f012195412a601a6d08533f1 Mon Sep 17 00:00:00 2001 From: Fran Dieguez Date: Thu, 5 May 2022 09:44:53 +0000 Subject: [PATCH 002/134] Update Galician translation --- po/gl.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/gl.po b/po/gl.po index 1d7df16..8680e2c 100644 --- a/po/gl.po +++ b/po/gl.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: apostrophe main\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/apostrophe/issues\n" "POT-Creation-Date: 2022-03-07 19:03+0000\n" -"PO-Revision-Date: 2022-05-05 11:41+0200\n" +"PO-Revision-Date: 2022-05-05 11:44+0200\n" "Last-Translator: Fran Dieguez \n" "Language-Team: Galician >\n" "Language: gl\n" @@ -391,11 +391,11 @@ msgstr "Restaurar sesión" #: data/ui/Preferences.ui:73 msgid "Return to your previous session when Apostrophe is started" -msgstr "Volver á súa anterior sesión cando Apostrophe inicie" +msgstr "Volver á súa anterior sesión cando Apóstrofe inicie" #: data/ui/Preferences.ui:91 msgid "Flavor of markdown Apostrophe will use" -msgstr "Variedade da documentación que usará Apostrophe" +msgstr "Variedade da documentación que usará Apóstrofe" #: data/ui/Preferences.ui:100 msgid "Markdown flavor documentation" -- 2.40.1 From 112e3c10b113c09f1299027647582fe63499aaa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ng=E1=BB=8Dc=20Qu=C3=A2n=20Tr=E1=BA=A7n?= Date: Sat, 28 May 2022 08:15:02 +0000 Subject: [PATCH 003/134] Update Vietnamese translation --- po/vi.po | 815 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 449 insertions(+), 366 deletions(-) diff --git a/po/vi.po b/po/vi.po index b3b37b2..5faaa3a 100644 --- a/po/vi.po +++ b/po/vi.po @@ -1,372 +1,432 @@ +# Trần Ngọc Quân , 2022. + msgid "" msgstr "" -"Project-Id-Version: Apostrophe\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-29 04:08+0200\n" +"Project-Id-Version: Apostrophe main\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/apostrophe/issues\n" +"POT-Creation-Date: 2022-05-05 09:45+0000\n" +"PO-Revision-Date: \n" +"Last-Translator: Trần Ngọc Quân \n" +"Language-Team: Vietnamese \n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: POEditor.com\n" - -#: apostrophe/export_dialog.py:128 apostrophe/export_dialog.py:323 -#: apostrophe/export_dialog.py:327 data/ui/Export.ui:62 -msgid "Export" -msgstr "Xuất ra" - -#: apostrophe/export_dialog.py:131 apostrophe/export_dialog.py:328 -#, python-format -msgid "Export to %s" -msgstr "" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Gtranslator 3.38.0\n" -#: apostrophe/export_dialog.py:133 apostrophe/export_dialog.py:324 -#: apostrophe/export_dialog.py:329 apostrophe/main_window.py:344 -#: apostrophe/main_window.py:435 apostrophe/main_window.py:508 -#: data/ui/Export.ui:47 -msgid "Cancel" -msgstr "Hủy bỏ" - -#: apostrophe/export_dialog.py:158 apostrophe/export_dialog.py:358 -#, python-brace-format -msgid "" -"An error happened while trying to export:\n" -"\n" -"{err_msg}" -msgstr "" - -#: apostrophe/export_dialog.py:234 -msgid "Export to {}" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:3 +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:5 +msgid "Apostrophe" +msgstr "Apostrophe" -#: apostrophe/export_dialog.py:324 -msgid "Select folder" +#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! Do NOT translate "uberwriter" or "apostrophe"! The list MUST also end with a semicolon! +#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:5 +msgid "uberwriter;UberWriter;apostrophe;markdown;editor;text;write;" msgstr "" +"uberwriter;UberWriter;apostrophe;markdown;editor;text;write;sửa;sua;văn bản;" +"van ban;viết;viet;" -#: apostrophe/headerbars.py:126 apostrophe/preview_renderer.py:132 -#: data/ui/PreviewLayoutSwitcherItem.ui:36 -msgid "Full-Width" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:6 +msgid "Apostrophe, an elegant, distraction-free markdown editor" +msgstr "Apostrophe, một bộ chỉnh sửa markdown tao nhã và không sao nhãng" -#: apostrophe/headerbars.py:128 apostrophe/preview_renderer.py:134 -msgid "Half-Width" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 +msgid "Color scheme" +msgstr "Lược đồ màu" -#: apostrophe/headerbars.py:130 apostrophe/preview_renderer.py:136 -msgid "Half-Height" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:30 +msgid "Use the color scheme in the application's UI and in the text area." +msgstr "Dùng lược đồ màu trong UI của ứng dụng và trong khu vực văn bản." -#: apostrophe/headerbars.py:132 apostrophe/preview_renderer.py:138 -msgid "Windowed" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 +#: data/ui/Preferences.ui:23 data/ui/Preferences.ui:24 +msgid "Check spelling while typing" +msgstr "Kiểm tra chính tả khi đang gõ" -#: apostrophe/helpers.py:90 -msgid "Error" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:37 +msgid "Enable or disable spellchecking." +msgstr "Bật hay tắt kiểm tra chính tả." -#: apostrophe/inhibitor.py:35 -msgid "Unsaved documents" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:43 +msgid "Synchronize editor/preview scrolling" +msgstr "Đồng bộ cuộn giữ ô sửa và ô xem trước" -#: apostrophe/inline_preview.py:201 -msgid "Formula looks incorrect:" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:44 +msgid "Keep the editor and preview scroll positions in sync." +msgstr "Gữi cho phần soạn thảo và xem trước được đồng bộ vị trí cuộn." -#: apostrophe/inline_preview.py:240 -msgid "No matching footnote found" -msgstr "Không có chú thích phù hợp được tìm thấy" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 +#: data/ui/Preferences.ui:90 +msgid "Input format" +msgstr "Định dạng đầu vào" -#: apostrophe/inline_preview.py:260 -msgid "noun" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:51 +msgid "Input format to use when previewing and exporting using Pandoc." +msgstr "Định dạng đầu vào được dùng khi xem thử và xuất ra sử dụng Pandoc." -#: apostrophe/inline_preview.py:262 -msgid "verb" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 +msgid "Autohide Headerbar" +msgstr "Tự động ẩn thanh tiêu đề" -#: apostrophe/inline_preview.py:264 -msgid "adjective" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:58 +msgid "Hide the header and status bars when typing." +msgstr "Ẩn thanh tiêu đề và trạng thái khi đang gõ." -#: apostrophe/inline_preview.py:266 -msgid "adverb" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:64 +msgid "Open file base path" +msgstr "Mở đường dẫn cơ sở tập tin" -#: apostrophe/main_window.py:340 -msgid "Save your File" -msgstr "Lưu tệp" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:65 +msgid "Open file paths of the current session" +msgstr "Mở các đường dẫn tập tin của phiên làm việc hiện tại" -#: apostrophe/main_window.py:343 data/ui/Headerbar.ui:225 -msgid "Save" -msgstr "Lưu" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 +msgid "Default statistic" +msgstr "Thống kê mặc định" -#: apostrophe/main_window.py:424 -msgid "Markdown Files" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:72 +msgid "Which statistic is shown on the main window." +msgstr "Thông tin thống kê nào sẽ được hiển thị trên cửa sổ chính." -#: apostrophe/main_window.py:428 -msgid "Plain Text Files" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:78 +msgid "Characters per line" +msgstr "Ký tự trên mỗi dòng" -#: apostrophe/main_window.py:431 -msgid "Open a .md file" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:79 +msgid "Maximum number of characters per line within the editor." +msgstr "Số lượng ký tự tối đa trên mỗi dòng ở trong trình soạn thảo." -#: apostrophe/main_window.py:434 data/ui/Headerbar.ui:182 -msgid "Open" -msgstr "Mở" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 +#: data/ui/Headerbar.ui:250 +msgid "Hemingway Mode" +msgstr "Chế độ Hemingway" -#: apostrophe/main_window.py:498 -#, python-format -msgid "Save changes to document “%s” before closing?" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:86 +msgid "Whether the user can delete text or not." +msgstr "Người dùng có thể xóa văn bản hay không." -#: apostrophe/main_window.py:503 -msgid "If you don’t save, all your changes will be permanently lost." -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:92 +msgid "Preview mode" +msgstr "Chế độ xem trước" -#: apostrophe/main_window.py:506 -msgid "Close without saving" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:93 +msgid "How to display the preview." +msgstr "Cách hiển xem trước như thế nào." -#: apostrophe/main_window.py:509 -msgid "Save now" -msgstr "Lưu ngay" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:99 +msgid "Preview active" +msgstr "Xem thử hoạt động" -#: apostrophe/main_window.py:711 -msgid "New File" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:100 +msgid "Whether showing of preview is active when launching a new window." msgstr "" +"Có nên hiển thị xem trước là tích cực khi khởi chạy một cửa sổ mới hay không." -#: apostrophe/preview_renderer.py:47 data/ui/Headerbar.ui:305 -msgid "Preview" -msgstr "Xem trước" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:106 +msgid "Text size" +msgstr "Kích cỡ chữ" -#: apostrophe/stats_handler.py:74 -msgid "{:n} Characters" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:107 +msgid "Preferred relative size for the text." +msgstr "Kích cỡ tương đối ưu thích dành cho chữ." -#: apostrophe/stats_handler.py:76 -msgid "{:n} Words" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:6 +msgid "Edit Markdown in style" +msgstr "Sửa Markdown trong kiểu dáng" -#: apostrophe/stats_handler.py:78 -msgid "{:n} Sentences" +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:8 +msgid "Focus on your writing with a clean, distraction-free markdown editor." msgstr "" +"Chú tâm vào việc viết lách của bạn bằng một bộ biên soạn markdown sạch sẽ và " +"không sao nhãng." -#: apostrophe/stats_handler.py:80 -msgid "{:n} Paragraphs" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:9 +msgid "Features:" +msgstr "Các tính năng:" -#: apostrophe/stats_handler.py:82 -msgid "{:d}:{:02d}:{:02d} Read Time" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:11 +msgid "An UI tailored to comfortable writing" +msgstr "Giao diện người dùng được may đo để việc viết lách trở nên dễ chịu" -#: apostrophe/text_view_drag_drop_handler.py:75 -#: apostrophe/text_view_drag_drop_handler.py:77 -msgid "web page" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:12 +msgid "A distraction-free mode" +msgstr "Một chế độ không sao nhãng" -#: apostrophe/text_view_format_inserter.py:14 -msgid "italic text" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:13 +msgid "Dark, light and sepia themes" +msgstr "Chủ đề tối, sáng và nâu" -#: apostrophe/text_view_format_inserter.py:19 -msgid "bold text" +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:14 +msgid "" +"Everything you expect from a text editor, such as spellchecking or document " +"statistics" msgstr "" +"Có mọi thứ bạn mong chờ từ trình soạn thảo văn bản, như là kiểm tra chính tả " +"hay thống kê tài liệu" -#: apostrophe/text_view_format_inserter.py:24 -msgid "strikethrough text" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:15 +msgid "Live preview of what you write" +msgstr "Xem thử trực tiếp những gì bạn đang viết" -#: apostrophe/text_view_format_inserter.py:50 -msgid "Item" +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:16 +msgid "" +"Export to all kind of formats: PDF, Word/Libreoffice, LaTeX, or even HTML " +"slideshows" msgstr "" +"Xuất ra nhiều định dạng khác nhau: PDF, Word/Libreoffice, LaTeX, hay thậm " +"chí là trình diễn định dạng HTML" -#: apostrophe/text_view_format_inserter.py:98 -msgid "Header" -msgstr "" +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:41 +msgid "Manuel G., Wolf V." +msgstr "Manuel G., Wolf V." #: data/ui/About.ui.in:12 -msgid "Copyright (C) 2020, Wolf Vollprecht" -msgstr "" +msgid "Copyright (C) 2022, Manuel G., Wolf V." +msgstr "Bản quyền (C) 2022, Manuel G., Wolf V." #: data/ui/About.ui.in:14 msgid "Apostrophe website" -msgstr "" +msgstr "Trang thông tin điện tử Apostrophe" #. Put your name in here, like this: #. Manuel Genovés #: data/ui/About.ui.in:20 msgid "translator-credits" -msgstr "" +msgstr "Nhóm Việt hóa GNOME " #: data/ui/About.ui.in:65 msgid "Donations:" -msgstr "" +msgstr "Quyên góp:" #: data/ui/About.ui.in:74 msgid "Paypal" -msgstr "" +msgstr "Paypal" #: data/ui/About.ui.in:105 msgid "Help to translate:" -msgstr "" +msgstr "Hỗ trợ dịch:" #: data/ui/About.ui.in:114 -msgid "Poeditor" -msgstr "" +msgid "Damned Lies" +msgstr "Damned Lies" + +#: data/ui/Export.ui:46 apostrophe/export_dialog.py:133 +#: apostrophe/export_dialog.py:324 apostrophe/export_dialog.py:329 +#: apostrophe/main_window.py:330 apostrophe/main_window.py:423 +#: apostrophe/main_window.py:508 +msgid "Cancel" +msgstr "Hủy bỏ" + +#: data/ui/Export.ui:61 apostrophe/export_dialog.py:128 +#: apostrophe/export_dialog.py:323 apostrophe/export_dialog.py:327 +msgid "Export" +msgstr "Xuất ra" -#: data/ui/Export.ui:154 +#: data/ui/Export.ui:153 msgid "Standalone" msgstr "Độc lập" -#: data/ui/Export.ui:156 +#: data/ui/Export.ui:155 msgid "" "Use a header and footer to include things like stylesheets and meta " "information" msgstr "" "Sử dụng header hoặc footer để thêm vào giao diện hoặc các thông tin bổ sung" -#: data/ui/Export.ui:171 +#: data/ui/Export.ui:170 msgid "Table of Contents" msgstr "Danh sách nội dung" -#: data/ui/Export.ui:187 +#: data/ui/Export.ui:186 msgid "Number Sections" msgstr "Phần số" -#: data/ui/Export.ui:211 data/ui/Export.ui:217 +#: data/ui/Export.ui:210 data/ui/Export.ui:216 msgid "Page Size" -msgstr "" +msgstr "Cỡ trang" -#: data/ui/Export.ui:236 +#: data/ui/Export.ui:235 msgid "HTML Options" -msgstr "" +msgstr "Tùy chọn HTML" -#: data/ui/Export.ui:242 +#: data/ui/Export.ui:241 msgid "Self-contained" -msgstr "" +msgstr "Tự-chứa" -#: data/ui/Export.ui:244 +#: data/ui/Export.ui:243 msgid "Produces an HTML file with no external dependencies" -msgstr "" +msgstr "Tạo ra một tập tin HTML mà không cần các phần phục thuộc bên ngoài" -#: data/ui/Export.ui:260 +#: data/ui/Export.ui:259 msgid "CSS File" msgstr "Tệp CSS" -#: data/ui/Export.ui:265 +#: data/ui/Export.ui:264 msgid "Select CSS file" -msgstr "" +msgstr "Chọn tập tin CSS" -#: data/ui/Export.ui:286 +#: data/ui/Export.ui:285 msgid "Syntax Highlighting" -msgstr "" +msgstr "Tô sáng cú pháp" -#: data/ui/Export.ui:301 +#: data/ui/Export.ui:300 msgid "Highlight style" -msgstr "" +msgstr "Kiểu tô sáng" -#: data/ui/Export.ui:322 +#: data/ui/Export.ui:321 msgid "Presentation" -msgstr "" +msgstr "Trình diễn" -#: data/ui/Export.ui:328 +#: data/ui/Export.ui:327 msgid "Incremental bullets" -msgstr "" +msgstr "Tăng gạch đầu dòng" -#: data/ui/Export.ui:330 +#: data/ui/Export.ui:329 msgid "Show one bullet point after another in a slideshow" msgstr "Hiển thị hết dấu đầu dòng này đến dấu đầu dòng khác trong trình chiếu" -#: data/ui/Export.ui:357 -msgid "page0" -msgstr "" - -#: data/ui/Export.ui:365 -msgid "page1" -msgstr "" - -#: data/ui/ExportPopover.ui:19 -msgid "Save As…" -msgstr "" - -#: data/ui/ExportPopover.ui:100 -msgid "Advanced Export…" -msgstr "" - -#: data/ui/ExportPopover.ui:125 -msgid "Copy HTML" -msgstr "" - -#: data/ui/Headerbar.ui:130 -msgid "Sync Views" -msgstr "" - -#: data/ui/Headerbar.ui:171 +#: data/ui/Headerbar.ui:57 msgid "New" msgstr "Mới" -#: data/ui/Headerbar.ui:199 -msgid "Open Recent" -msgstr "Mở gần đây" +#: data/ui/Headerbar.ui:67 apostrophe/main_window.py:422 +msgid "Open" +msgstr "Mở" + +#: data/ui/Headerbar.ui:90 apostrophe/main_window.py:329 +msgid "Save" +msgstr "Lưu" -#: data/ui/Headerbar.ui:242 +#: data/ui/Headerbar.ui:102 msgid "Save as…" -msgstr "" +msgstr "Lưu thành…" -#: data/ui/Headerbar.ui:283 +#: data/ui/Headerbar.ui:140 msgid "Menu" -msgstr "" +msgstr "Trình đơn" -#: data/ui/Headerbar.ui:378 +#: data/ui/Headerbar.ui:166 msgid "Find" -msgstr "" +msgstr "Tìm kiếm" -#: data/ui/Menu.ui:43 -msgid "Hemingway Mode" -msgstr "" +#: data/ui/Headerbar.ui:225 +msgid "New Window" +msgstr "Cửa sổ mới" -#: data/ui/Menu.ui:57 +#: data/ui/Headerbar.ui:264 msgid "Focus Mode" msgstr "Chế độ tập trung" -#: data/ui/Menu.ui:82 +#: data/ui/Headerbar.ui:289 msgid "Find and Replace" -msgstr "" +msgstr "Tìm và thay thế" -#: data/ui/Menu.ui:107 data/ui/Preferences.ui:19 +#: data/ui/Headerbar.ui:314 msgid "Preferences" msgstr "Tùy chọn" -#: data/ui/Menu.ui:132 +#: data/ui/Headerbar.ui:339 msgid "Open Tutorial" msgstr "Mở hướng dẫn" -#: data/ui/Menu.ui:146 +#: data/ui/Headerbar.ui:353 msgid "Keyboard Shortcuts" -msgstr "" +msgstr "Phím tắt" -#: data/ui/Menu.ui:160 +#: data/ui/Headerbar.ui:367 msgid "About Apostrophe" -msgstr "" +msgstr "Giới thiệu về Apostrophe" -#: data/ui/Preferences.ui:49 -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:35 -msgid "Check spelling while typing" -msgstr "" +#: data/ui/Headerbar.ui:395 +msgid "Save As…" +msgstr "Lưu thành…" -#: data/ui/Preferences.ui:73 -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:49 -msgid "Input format" -msgstr "" +#: data/ui/Headerbar.ui:476 +msgid "Advanced Export…" +msgstr "Xuất cấp cao…" -#: data/ui/Preferences.ui:110 -msgid "Autohide header and statusbars while typing" -msgstr "" +#: data/ui/Headerbar.ui:501 +msgid "Copy HTML" +msgstr "Chép HTML" -#: data/ui/Preferences.ui:112 +#: data/ui/Preferences.ui:40 msgid "Autohide headerbar" +msgstr "Tự động ẩn thanh tiêu đề" + +#: data/ui/Preferences.ui:41 +msgid "Autohide header and statusbars while typing" +msgstr "Tự động ẩn thanh tiêu đề và thanh trạng thái khi đang gõ" + +#: data/ui/Preferences.ui:57 +msgid "Use bigger text" +msgstr "Dùng chữ lớn hơn" + +#: data/ui/Preferences.ui:58 +msgid "Reduce the margins width and increase the text size when possible" +msgstr "Giảm độ rộng lề và gia tăng cỡ chữ khi có thể" + +#: data/ui/Preferences.ui:72 +msgid "Restore session" +msgstr "Phục hồi phiên làm việc" + +#: data/ui/Preferences.ui:73 +msgid "Return to your previous session when Apostrophe is started" msgstr "" +"Quay trở lại dùng phiên làm việc trước của bạn khi Apostrophe được khởi chạy" + +#: data/ui/Preferences.ui:91 +msgid "Flavor of markdown Apostrophe will use" +msgstr "Biến thể markdown Apostrophe sẽ sử dụng" + +#: data/ui/Preferences.ui:100 +msgid "Markdown flavor documentation" +msgstr "Tài liệu biến thể Markdown" + +#: data/ui/PreviewLayoutSwitcher.ui:10 apostrophe/preview_renderer.py:210 +msgid "Preview" +msgstr "Xem trước" + +#: data/ui/PreviewLayoutSwitcher.ui:32 +msgid "Screen Layout" +msgstr "Bố cục màn hình" + +#: data/ui/Recents.ui:60 +msgid "No Recent Documents" +msgstr "Không có tài liệu mới dùng nào" + +#: data/ui/Recents.ui:88 +msgid "No Results Found" +msgstr "Không tìm thấy kết quả nào" + +#: data/ui/SearchBar.ui:50 +msgid "Previous Match" +msgstr "Kết quả phù hợp trước" + +#: data/ui/SearchBar.ui:63 +msgid "Next Match" +msgstr "Kết quả phù hợp tiếp" + +#. Translators: This indicates case sensitivity, so it should be the first vowel of the language in lowercase and uppercase +#: data/ui/SearchBar.ui:85 +msgid "aA" +msgstr "aA" + +#: data/ui/SearchBar.ui:89 +msgid "Case Sensitive" +msgstr "Phân biệt HOA/thường" + +#: data/ui/SearchBar.ui:99 +msgid "Regular Expression" +msgstr "Biểu thức chính quy" + +#: data/ui/SearchBar.ui:111 data/ui/SearchBar.ui:165 +msgid "Replace" +msgstr "Thay thế" + +#: data/ui/SearchBar.ui:175 +msgid "Replace All" +msgstr "Thay thế tất cả" #: data/ui/Shortcuts.ui:13 msgctxt "shortcut window" @@ -391,22 +451,22 @@ msgstr "Lưu" #: data/ui/Shortcuts.ui:38 msgctxt "shortcut window" msgid "Save as" -msgstr "Lưu như" +msgstr "Lưu thành" #: data/ui/Shortcuts.ui:45 msgctxt "shortcut window" msgid "Close document" -msgstr "" +msgstr "Đóng tài liệu" #: data/ui/Shortcuts.ui:52 msgctxt "shortcut window" msgid "Quit application" -msgstr "" +msgstr "Thoát khỏi ứng dụng" #: data/ui/Shortcuts.ui:61 msgctxt "shortcut window" msgid "Modes" -msgstr "" +msgstr "Chế độ" #: data/ui/Shortcuts.ui:65 msgctxt "shortcut window" @@ -416,7 +476,7 @@ msgstr "Chế độ tập trung" #: data/ui/Shortcuts.ui:72 msgctxt "shortcut window" msgid "Hemingway mode" -msgstr "" +msgstr "Chế độ Hemingway" #: data/ui/Shortcuts.ui:79 msgctxt "shortcut window" @@ -431,17 +491,17 @@ msgstr "Toàn màn hình" #: data/ui/Shortcuts.ui:95 data/ui/Shortcuts.ui:99 msgctxt "shortcut window" msgid "Find" -msgstr "" +msgstr "Tìm kiếm" #: data/ui/Shortcuts.ui:106 msgctxt "shortcut window" msgid "Find and replace" -msgstr "" +msgstr "Tìm và thay thế" #: data/ui/Shortcuts.ui:115 msgctxt "shortcut window" msgid "Markdown" -msgstr "" +msgstr "Markdown" #: data/ui/Shortcuts.ui:119 msgctxt "shortcut window" @@ -466,207 +526,230 @@ msgstr "Chữ in đậm" #: data/ui/Shortcuts.ui:147 msgctxt "shortcut window" msgid "Strikeout" -msgstr "" +msgstr "Gạch ngang" #: data/ui/Shortcuts.ui:156 msgctxt "shortcut window" msgid "Copy and paste" -msgstr "" +msgstr "Chép và Dán" #: data/ui/Shortcuts.ui:160 msgctxt "shortcut window" msgid "Copy selected text to clipboard" -msgstr "" +msgstr "Chép chữ đã chọn vào clipboard" #: data/ui/Shortcuts.ui:167 msgctxt "shortcut window" msgid "Cut selected text to clipboard" -msgstr "" +msgstr "Cắt chữ đã chọn vào clipboard" #: data/ui/Shortcuts.ui:174 msgctxt "shortcut window" msgid "Paste selected text from clipboard" -msgstr "" +msgstr "Dán chữ đã chọn từ clipboard" #: data/ui/Shortcuts.ui:183 msgctxt "shortcut window" msgid "Undo and redo" -msgstr "" +msgstr "Hoàn tác và Redo" #: data/ui/Shortcuts.ui:187 msgctxt "shortcut window" msgid "Undo previous command" -msgstr "" +msgstr "Hoàn lại lệnh trước đó" #: data/ui/Shortcuts.ui:194 msgctxt "shortcut window" msgid "Redo previous command" -msgstr "" +msgstr "Làm lại lệnh trước đó" #: data/ui/Shortcuts.ui:203 msgctxt "shortcut window" msgid "Selection" -msgstr "" +msgstr "Lựa chọn" #: data/ui/Shortcuts.ui:207 msgctxt "shortcut window" msgid "Select all text" -msgstr "" +msgstr "Chọn hết văn bản" -#: data/ui/Window.ui:107 -msgid "Show Statistics" -msgstr "" +#: data/ui/ThemeSwitcher.ui:22 +msgid "Use System Colors" +msgstr "Dùng các màu của hệ thống" -#: data/ui/Window.ui:206 -msgid "Previous Match" -msgstr "Kết quả phù hợp trước" +#: data/ui/ThemeSwitcher.ui:51 +msgid "Use Light Colors" +msgstr "Sử dụng màu sáng" -#: data/ui/Window.ui:220 -msgid "Next Match" -msgstr "Kết quả phù hợp tiếp" +#: data/ui/ThemeSwitcher.ui:80 +msgid "Use Sepia Colors" +msgstr "Sử dụng màu Nâu đen" -#: data/ui/Window.ui:249 -msgid "aA" -msgstr "" +#: data/ui/ThemeSwitcher.ui:109 +msgid "Use Dark Colors" +msgstr "Sử dụng màu tối" -#: data/ui/Window.ui:253 -msgid "Case Sensitive" -msgstr "Phân biệt in nghiêng, in thường" +#: data/ui/Window.ui:71 +msgid "Show Statistics" +msgstr "Hiển thị các thống kê" -#: data/ui/Window.ui:263 -msgid "(.*)" -msgstr "" +#: apostrophe/export_dialog.py:131 apostrophe/export_dialog.py:328 +#, python-format +msgid "Export to %s" +msgstr "Xuất thành %s" -#: data/ui/Window.ui:267 -msgid "Regular Expression" +#: apostrophe/export_dialog.py:158 apostrophe/export_dialog.py:358 +#, python-brace-format +msgid "" +"An error happened while trying to export:\n" +"\n" +"{err_msg}" msgstr "" +"Có lỗi đã xảy ra khi đang thử xuất ra:\n" +"\n" +"{err_msg}" -#: data/ui/Window.ui:280 data/ui/Window.ui:358 -msgid "Replace" -msgstr "Thay thế" +#: apostrophe/export_dialog.py:234 +msgid "Export to {}" +msgstr "Xuất thành {}" -#: data/ui/Window.ui:372 -msgid "Replace All" -msgstr "" +#: apostrophe/export_dialog.py:324 +msgid "Select folder" +msgstr "Chọn thư mục" -#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:5 -#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:3 -msgid "Apostrophe" -msgstr "" +#: apostrophe/helpers.py:89 +msgid "Error" +msgstr "Lỗi" -#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:6 -msgid "An elegant, distraction-free markdown editor" -msgstr "" +#: apostrophe/inhibitor.py:36 +msgid "Unsaved documents" +msgstr "Tài liệu chưa được ghi lại" -#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:8 -msgid "Focus on your writing with a clean, distraction-free markdown editor." -msgstr "" +#: apostrophe/inline_preview.py:200 +msgid "Formula looks incorrect:" +msgstr "Công thức trông có vẻ không đúng:" -#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:9 -msgid "Features:" -msgstr "" +#: apostrophe/inline_preview.py:239 +msgid "No matching footnote found" +msgstr "Không có chú thích phù hợp được tìm thấy" -#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:11 -msgid "An UI tailored to comfortable writing" -msgstr "" +#: apostrophe/inline_preview.py:259 +msgid "noun" +msgstr "danh từ" -#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:12 -msgid "A distraction-free mode" -msgstr "" +#: apostrophe/inline_preview.py:261 +msgid "verb" +msgstr "động từ" -#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:13 -msgid "Dark, light and sepia themes" -msgstr "" +#: apostrophe/inline_preview.py:263 +msgid "adjective" +msgstr "tính từ" -#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:14 -msgid "" -"Everything you expect from a text editor, such as spellchecking or document " -"statistics" -msgstr "" +#: apostrophe/inline_preview.py:265 +msgid "adverb" +msgstr "phó từ" -#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:15 -msgid "Live preview of what you write" -msgstr "" +#: apostrophe/main_window.py:326 +msgid "Save your File" +msgstr "Lưu tệp" -#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:16 -msgid "" -"Export to all kind of formats: PDF, Word/Libreoffice, LaTeX, or even HTML " -"slideshows" -msgstr "" +#: apostrophe/main_window.py:412 +msgid "Markdown Files" +msgstr "Các tập tin Markdown" -#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:41 -msgid "Wolf V., Manuel G." -msgstr "" +#: apostrophe/main_window.py:416 +msgid "Plain Text Files" +msgstr "Tập tin Văn bản Thuần" -#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! -#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:5 -msgid "uberwriter;UberWriter;apostrophe;markdown;editor;" -msgstr "" +#: apostrophe/main_window.py:419 +msgid "Open a .md file" +msgstr "Mở một tập tin .md" -#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:6 -msgid "Apostrophe, an elegant, distraction-free markdown editor" -msgstr "" +#: apostrophe/main_window.py:498 +#, python-format +msgid "Save changes to document “%s” before closing?" +msgstr "Lưu các thay đổi trong tài liệu “%s” trước khi đóng lại chứ?" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:28 -msgid "Color scheme" -msgstr "" +#: apostrophe/main_window.py:503 +msgid "If you don’t save, all your changes will be permanently lost." +msgstr "Nếu bạn không lưu tài liệu, các thay đổi của bạn sẽ hoàn toàn bị mất." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 -msgid "Use the color scheme in the application's UI and in the text area." -msgstr "" +#: apostrophe/main_window.py:506 +msgid "Close without saving" +msgstr "Đóng không lưu" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 -msgid "Enable or disable spellchecking." -msgstr "" +#: apostrophe/main_window.py:509 +msgid "Save now" +msgstr "Lưu ngay" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:42 -msgid "Synchronize editor/preview scrolling" -msgstr "" +#: apostrophe/main_window.py:686 +msgid "New File" +msgstr "Tập tin mới" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:43 -msgid "Keep the editor and preview scroll positions in sync." -msgstr "" +#: apostrophe/preview_layout_switcher.py:38 +msgid "Full-Width" +msgstr "Toàn-chiều-rộng" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 -msgid "Input format to use when previewing and exporting using Pandoc." -msgstr "" +#: apostrophe/preview_layout_switcher.py:40 +msgid "Half-Width" +msgstr "Nửa-chiều-rộng" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:56 -msgid "Autohide Headerbar" -msgstr "" +#: apostrophe/preview_layout_switcher.py:42 +msgid "Half-Height" +msgstr "Nửa-chiều-cao" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 -msgid "Hide the header and status bars when typing." -msgstr "" +#: apostrophe/preview_layout_switcher.py:44 +msgid "Windowed" +msgstr "Cửa sổ" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:63 -msgid "Open file base path" -msgstr "" +#: apostrophe/stats_handler.py:75 +msgid "{:n} Character" +msgid_plural "{:n} Characters" +msgstr[0] "{:n} Ký tự" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:64 -msgid "Open file paths of the current session" -msgstr "" +#: apostrophe/stats_handler.py:77 +msgid "{:n} Word" +msgid_plural "{:n} Words" +msgstr[0] "{:n} Từ" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:70 -msgid "Default statistic" -msgstr "" +#: apostrophe/stats_handler.py:79 +msgid "{:n} Sentence" +msgid_plural "{:n} Sentences" +msgstr[0] "{:n} Câu" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 -msgid "Which statistic is shown on the main window." -msgstr "" +#: apostrophe/stats_handler.py:81 +msgid "{:n} Paragraph" +msgid_plural "{:n} Paragraphs" +msgstr[0] "{:n} Đoạn" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:77 -msgid "Characters per line" -msgstr "" +#: apostrophe/stats_handler.py:83 +msgid "{:d}:{:02d}:{:02d} Read Time" +msgstr "{:d}:{:02d}:{:02d} Thời gian đọc" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:78 -msgid "Maximum number of characters per line within the editor." -msgstr "" +#: apostrophe/text_view_drag_drop_handler.py:75 +#: apostrophe/text_view_drag_drop_handler.py:77 +msgid "web page" +msgstr "trang thông tin điện tử" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:84 -msgid "Preview mode" -msgstr "" +#: apostrophe/text_view_format_inserter.py:14 +msgid "italic text" +msgstr "chữ ghiêng" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 -msgid "How to display the preview." -msgstr "" +#: apostrophe/text_view_format_inserter.py:19 +msgid "bold text" +msgstr "chữ đậm" + +#: apostrophe/text_view_format_inserter.py:24 +msgid "strikethrough text" +msgstr "chữ bị gạch xóa" + +#: apostrophe/text_view_format_inserter.py:50 +msgid "Item" +msgstr "Mục" + +#: apostrophe/text_view_format_inserter.py:98 +msgid "Header" +msgstr "Đầu trang" + +#~ msgid "Open Recent" +#~ msgstr "Mới mở gần đây" -- 2.40.1 From 169752ca2014fa1a8c8ae1a3494b1c722a2bdd6c Mon Sep 17 00:00:00 2001 From: Zurab Kargareteli Date: Tue, 7 Jun 2022 04:09:18 +0000 Subject: [PATCH 004/134] Add Georgian translation --- po/LINGUAS | 1 + po/ka.po | 761 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 762 insertions(+) create mode 100644 po/ka.po diff --git a/po/LINGUAS b/po/LINGUAS index 9fb76e4..2758108 100644 --- a/po/LINGUAS +++ b/po/LINGUAS @@ -14,6 +14,7 @@ hr hu id it +ka nl oc pl diff --git a/po/ka.po b/po/ka.po new file mode 100644 index 0000000..3d657e2 --- /dev/null +++ b/po/ka.po @@ -0,0 +1,761 @@ +# Georgian translation for apostrophe. +# Copyright (C) 2022 apostrophe's COPYRIGHT HOLDER +# This file is distributed under the same license as the apostrophe package. +# FIRST AUTHOR , YEAR. +# Jacob Gogichaishvili , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: apostrophe main\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/apostrophe/issues\n" +"POT-Creation-Date: 2022-03-13 21:21+0000\n" +"PO-Revision-Date: 2022-03-15 13:13+0400\n" +"Last-Translator: Jacob Gogichaishvili \n" +"Language-Team: Georgian < >\n" +"Language: ka\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0\n" +"X-DL-Team: ka\n" +"X-DL-Module: apostrophe\n" +"X-DL-Branch: main\n" +"X-DL-Domain: po\n" +"X-DL-State: Translating\n" +"X-Generator: Gtranslator 40.0\n" + +#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:3 +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:5 +msgid "Apostrophe" +msgstr "აპოსტროფი" + +#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! Do NOT translate "uberwriter" or "apostrophe"! The list MUST also end with a semicolon! +#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:5 +msgid "uberwriter;UberWriter;apostrophe;markdown;editor;text;write;" +msgstr "uberwriter;UberWriter;აპოსტროფი;მარკდაუნი;რედაქტორი;ტექსტი;წერა;" + +#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:6 +msgid "Apostrophe, an elegant, distraction-free markdown editor" +msgstr "აპოსტროფი - ელეგანტური, ფოკუსირებული მარკდაუნის რედაქტორი" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 +msgid "Color scheme" +msgstr "ფერების სქემა" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:30 +msgid "Use the color scheme in the application's UI and in the text area." +msgstr "ფერების სქემის ხმარება აპლიკაციის ინტერფეისში და ტექტის ზონაში" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 +#: data/ui/Preferences.ui:23 data/ui/Preferences.ui:24 +msgid "Check spelling while typing" +msgstr "მართლწერის შემოწმება წერის დროს" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:37 +msgid "Enable or disable spellchecking." +msgstr "ჩართვა ან გამორთვა მართლწერის შემოწმების." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:43 +msgid "Synchronize editor/preview scrolling" +msgstr "რედაქრორის და გადახედვის პოზიციის სინქრონირება" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:44 +msgid "Keep the editor and preview scroll positions in sync." +msgstr "რედაქრორის და გადახედვის პოზიციის სინქრონირება." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 +#: data/ui/Preferences.ui:90 +msgid "Input format" +msgstr "შეყვანილი ფორმატი" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:51 +msgid "Input format to use when previewing and exporting using Pandoc." +msgstr "შეყვანილი ფორმატი, რომელიც გამოიყენება გადახედვის და ექსპორტის დროს." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 +msgid "Autohide Headerbar" +msgstr "სათაურის ზოლის ავტოდამალვა." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:58 +msgid "Hide the header and status bars when typing." +msgstr "სათაურ და სტატუსის ზოლის დამალვა კრეფვის დროს." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:64 +msgid "Open file base path" +msgstr "ფაილის ლოკაციის გახსნა" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:65 +msgid "Open file paths of the current session" +msgstr "გასნილი ფაილების ლოკაციები მინდინარე სესიაში" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 +msgid "Default statistic" +msgstr "ნაგულისხმევი სტატისტიკა" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:72 +msgid "Which statistic is shown on the main window." +msgstr "რომელი სტატისტიკა ნაჩვენებია მთავარ ფანჯარაზე." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:78 +msgid "Characters per line" +msgstr "ასოები თითო სტრიქონში" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:79 +msgid "Maximum number of characters per line within the editor." +msgstr "მაქსიმუმი ასო თითო სტრიქონში რედაქტორში." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 +#: data/ui/Headerbar.ui:250 +msgid "Hemingway Mode" +msgstr "ჰემინგვეის რეჟიმი" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:86 +msgid "Whether the user can delete text or not." +msgstr "შეუძლია თუ არა მომხმარებელს ტექსტის წაშლა." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:92 +msgid "Preview mode" +msgstr "გადახედვის რეჟიმი" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:93 +msgid "How to display the preview." +msgstr "როგორ გამოჩნდება გადახედვა." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:99 +msgid "Preview active" +msgstr "გადახედვა თუ გააქტირებულია" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:100 +msgid "Whether showing of preview is active when launching a new window." +msgstr "აქტიურია თუ არა გადახედვის ჩვენება ახალი ფანჯრის გაშვებისას." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:106 +msgid "Text size" +msgstr "ტექსტის ზომა" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:107 +msgid "Preferred relative size for the text." +msgstr "სასურველი შედარებითი ზომა ტექსტისთვის." + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:6 +msgid "Edit Markdown in style" +msgstr "წერეთ მარკდაუნი მოდაში" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:8 +msgid "Focus on your writing with a clean, distraction-free markdown editor." +msgstr "კონცენტრა" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:9 +msgid "Features:" +msgstr "ფუნქციები:" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:11 +msgid "An UI tailored to comfortable writing" +msgstr "კომფორტული წერისთვის მორგებული ინტერფეისი" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:12 +msgid "A distraction-free mode" +msgstr "ყურადღების არა-გაფანტვის რეჟიმი" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:13 +msgid "Dark, light and sepia themes" +msgstr "მუქი, ღია და სეპიას თემები" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:14 +msgid "" +"Everything you expect from a text editor, such as spellchecking or document " +"statistics" +msgstr "" +"ყველაფერი, რასაც მოელით ტექსტის რედაქტორი, როგირიცაა მართლწერის შემოწმება და " +"დოკუმენტის სტატისტიკები" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:15 +msgid "Live preview of what you write" +msgstr "პირდაპირი გადახედვა თქვენი ნაწერის" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:16 +msgid "" +"Export to all kind of formats: PDF, Word/Libreoffice, LaTeX, or even HTML " +"slideshows" +msgstr "" +"ექსპორტი ყველა სახის ფორმატში: PDF, Word/Libreoffice, LaTeX ან თუნდაც HTML " +"სლაიდშოუ" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:41 +msgid "Manuel G., Wolf V." +msgstr "მანუელ გ., ვულფ ვ." + +#: data/ui/About.ui.in:12 +msgid "Copyright (C) 2022, Manuel G., Wolf V." +msgstr "საავტორო უფლებიბი (C) 2022, მანუელ გ., ვულფ ვ." + +#: data/ui/About.ui.in:14 +msgid "Apostrophe website" +msgstr "აპოსტროფის ვებგვერდი" + +#. Put your name in here, like this: +#. Manuel Genovés +#: data/ui/About.ui.in:20 +msgid "translator-credits" +msgstr "Jacob Gogichaishvili " + +#: data/ui/About.ui.in:65 +msgid "Donations:" +msgstr "შემოწირულობები:" + +#: data/ui/About.ui.in:74 +msgid "Paypal" +msgstr "Paypal" + +#: data/ui/About.ui.in:105 +msgid "Help to translate:" +msgstr "თარგმნაში დაგვეხმარეთ:" + +#: data/ui/About.ui.in:114 +msgid "Damned Lies" +msgstr "Damned Lies" + +#: data/ui/Export.ui:46 apostrophe/export_dialog.py:133 +#: apostrophe/export_dialog.py:324 apostrophe/export_dialog.py:329 +#: apostrophe/main_window.py:331 apostrophe/main_window.py:424 +#: apostrophe/main_window.py:509 +msgid "Cancel" +msgstr "გაუქმება" + +#: data/ui/Export.ui:61 apostrophe/export_dialog.py:128 +#: apostrophe/export_dialog.py:323 apostrophe/export_dialog.py:327 +msgid "Export" +msgstr "ექსპორტირება" + +#: data/ui/Export.ui:153 +msgid "Standalone" +msgstr "დამოუკიდებელი" + +#: data/ui/Export.ui:155 +msgid "" +"Use a header and footer to include things like stylesheets and meta " +"information" +msgstr "" +"მოიხმარეთ ჰედერი და ფუტერი რომ დაამატოდ ელემენტები როგორიცაა სტილის ცხრილები " +"და დოკუმენტის ინფორმაცია." + +#: data/ui/Export.ui:170 +msgid "Table of Contents" +msgstr "სარჩევი" + +#: data/ui/Export.ui:186 +msgid "Number Sections" +msgstr "ნომრის სექციები" + +#: data/ui/Export.ui:210 data/ui/Export.ui:216 +msgid "Page Size" +msgstr "გვერდის ზომა" + +#: data/ui/Export.ui:235 +msgid "HTML Options" +msgstr "HTML" + +#: data/ui/Export.ui:241 +msgid "Self-contained" +msgstr "თვითმყოფადი" + +#: data/ui/Export.ui:243 +msgid "Produces an HTML file with no external dependencies" +msgstr "ქმნის დამოუკიდებელ HTML ფაილს" + +#: data/ui/Export.ui:259 +msgid "CSS File" +msgstr "CSS ფაილი" + +#: data/ui/Export.ui:264 +msgid "Select CSS file" +msgstr "აირჩიეთ CSS ფაილი" + +#: data/ui/Export.ui:285 +msgid "Syntax Highlighting" +msgstr "სინტაქსის ხაზგასმა" + +#: data/ui/Export.ui:300 +msgid "Highlight style" +msgstr "ხასგასმის სტილი" + +#: data/ui/Export.ui:321 +msgid "Presentation" +msgstr "პრეზენტაცია" + +#: data/ui/Export.ui:327 +msgid "Incremental bullets" +msgstr "ინკრემენტული ტყვიები" + +#: data/ui/Export.ui:329 +msgid "Show one bullet point after another in a slideshow" +msgstr "ჩვენება ერთი ტყვია მეორის მიყოლებით სლაიდშოუში" + +#: data/ui/Headerbar.ui:57 +msgid "New" +msgstr "ახალი" + +#: data/ui/Headerbar.ui:67 apostrophe/main_window.py:423 +msgid "Open" +msgstr "გახსნა" + +#: data/ui/Headerbar.ui:90 apostrophe/main_window.py:330 +msgid "Save" +msgstr "შენახვა" + +#: data/ui/Headerbar.ui:102 +msgid "Save as…" +msgstr "შენახვა როგორც..." + +#: data/ui/Headerbar.ui:140 +msgid "Menu" +msgstr "მენიუ" + +#: data/ui/Headerbar.ui:166 +msgid "Find" +msgstr "ძებნა" + +#: data/ui/Headerbar.ui:225 +msgid "New Window" +msgstr "ახალი ფანჯარა" + +#: data/ui/Headerbar.ui:264 +msgid "Focus Mode" +msgstr "კონცენტრაციის რეჟიმი" + +#: data/ui/Headerbar.ui:289 +msgid "Find and Replace" +msgstr "ძებმა და ჩანაცვლება" + +#: data/ui/Headerbar.ui:314 +msgid "Preferences" +msgstr "პარამეტრები" + +#: data/ui/Headerbar.ui:339 +msgid "Open Tutorial" +msgstr "გაკვეთილის გახსნა" + +#: data/ui/Headerbar.ui:353 +msgid "Keyboard Shortcuts" +msgstr "კლავიატურის მალსახსომები" + +#: data/ui/Headerbar.ui:367 +msgid "About Apostrophe" +msgstr "აპოსტროფის შესახებ" + +#: data/ui/Headerbar.ui:395 +msgid "Save As…" +msgstr "შენახვა როგორც…" + +#: data/ui/Headerbar.ui:476 +msgid "Advanced Export…" +msgstr "გაფართოებული ექსპორტირება…" + +#: data/ui/Headerbar.ui:501 +msgid "Copy HTML" +msgstr "HTML-ის კოპირება" + +#: data/ui/Preferences.ui:40 +msgid "Autohide headerbar" +msgstr "ავტომალვა სათაური ზოლის" + +#: data/ui/Preferences.ui:41 +msgid "Autohide header and statusbars while typing" +msgstr "ავტომალვა სათაურ და სტატუსის ზოლევის კრეფვის დრის" + +#: data/ui/Preferences.ui:57 +msgid "Use bigger text" +msgstr "უფრო დიდი ტექსტის ხმარება" + +#: data/ui/Preferences.ui:58 +msgid "Reduce the margins width and increase the text size when possible" +msgstr "" +"მინდვრების სიგანის დაპატარავებაბა და ტექსტის ზომის გაზრდა როცა შეიძლება" + +#: data/ui/Preferences.ui:72 +msgid "Restore session" +msgstr "სესიის აღდგენა" + +#: data/ui/Preferences.ui:73 +msgid "Return to your previous session when Apostrophe is started" +msgstr "დაბრუნება წინა სესიაზე როცა გახსნით აპოსტროფს" + +#: data/ui/Preferences.ui:91 +msgid "Flavor of markdown Apostrophe will use" +msgstr "რომელ მარკდაუნის ტიპს მოიხმარს აპოსტროფი" + +#: data/ui/Preferences.ui:100 +msgid "Markdown flavor documentation" +msgstr "მარკდაუნის ტიპის დოკუმენტაცია" + +#: data/ui/PreviewLayoutSwitcher.ui:10 data/ui/PreviewWindow.ui:13 +msgid "Preview" +msgstr "გადახედვა" + +#: data/ui/PreviewLayoutSwitcher.ui:32 +msgid "Screen Layout" +msgstr "ეკრანის განლაგება" + +#: data/ui/Recents.ui:60 +msgid "No Recent Documents" +msgstr "არ არსებობს წინა დოკუმენტები" + +#: data/ui/Recents.ui:88 +msgid "No Results Found" +msgstr "ძებნამ ვერაფერი იპოვა" + +#: data/ui/SearchBar.ui:50 +msgid "Previous Match" +msgstr "წინა ნაპოვნი" + +#: data/ui/SearchBar.ui:63 +msgid "Next Match" +msgstr "შემდეგი ნაპოვნი" + +#. Translators: This indicates case sensitivity, so it should be the first vowel of the language in lowercase and uppercase +#: data/ui/SearchBar.ui:85 +msgid "aA" +msgstr "aA" + +#: data/ui/SearchBar.ui:89 +msgid "Case Sensitive" +msgstr "დიდი ასოს გმრძნობიარე" + +#: data/ui/SearchBar.ui:99 +msgid "Regular Expression" +msgstr "რეგულარული ექსპრესია" + +#: data/ui/SearchBar.ui:111 data/ui/SearchBar.ui:165 +msgid "Replace" +msgstr "ჩანაცვლება" + +#: data/ui/SearchBar.ui:175 +msgid "Replace All" +msgstr "ყველას ჩანაცვლება" + +#: data/ui/Shortcuts.ui:13 +msgctxt "shortcut window" +msgid "General" +msgstr "ძირითადი" + +#: data/ui/Shortcuts.ui:17 +msgctxt "shortcut window" +msgid "New" +msgstr "ახალი" + +#: data/ui/Shortcuts.ui:24 +msgctxt "shortcut window" +msgid "Open" +msgstr "გახსნა" + +#: data/ui/Shortcuts.ui:31 +msgctxt "shortcut window" +msgid "Save" +msgstr "შენახვა" + +#: data/ui/Shortcuts.ui:38 +msgctxt "shortcut window" +msgid "Save as" +msgstr "შენახვა როგორც" + +#: data/ui/Shortcuts.ui:45 +msgctxt "shortcut window" +msgid "Close document" +msgstr "დოკუმენტის დახურვა" + +#: data/ui/Shortcuts.ui:52 +msgctxt "shortcut window" +msgid "Quit application" +msgstr "აპლიკაციიდან გასვლა" + +#: data/ui/Shortcuts.ui:61 +msgctxt "shortcut window" +msgid "Modes" +msgstr "რეჟიმები" + +#: data/ui/Shortcuts.ui:65 +msgctxt "shortcut window" +msgid "Focus mode" +msgstr "კონცენტრაციის რეჟიმი" + +#: data/ui/Shortcuts.ui:72 +msgctxt "shortcut window" +msgid "Hemingway mode" +msgstr "ჰემინგვეის რეჟიმი" + +#: data/ui/Shortcuts.ui:79 +msgctxt "shortcut window" +msgid "Preview" +msgstr "გადახედვა" + +#: data/ui/Shortcuts.ui:86 +msgctxt "shortcut window" +msgid "Fullscreen" +msgstr "მთელ ეკრანზე" + +#: data/ui/Shortcuts.ui:95 data/ui/Shortcuts.ui:99 +msgctxt "shortcut window" +msgid "Find" +msgstr "ძებნა" + +#: data/ui/Shortcuts.ui:106 +msgctxt "shortcut window" +msgid "Find and replace" +msgstr "ძებნა და ჩანაცვლება" + +#: data/ui/Shortcuts.ui:115 +msgctxt "shortcut window" +msgid "Markdown" +msgstr "მარკდაუნი" + +#: data/ui/Shortcuts.ui:119 +msgctxt "shortcut window" +msgid "Separator" +msgstr "გამყოფი" + +#: data/ui/Shortcuts.ui:126 +msgctxt "shortcut window" +msgid "List item" +msgstr "სიის ელემენტი" + +#: data/ui/Shortcuts.ui:133 +msgctxt "shortcut window" +msgid "Italic" +msgstr "დახრა" + +#: data/ui/Shortcuts.ui:140 +msgctxt "shortcut window" +msgid "Bold" +msgstr "ბოლდირება" + +#: data/ui/Shortcuts.ui:147 +msgctxt "shortcut window" +msgid "Strikeout" +msgstr "ხაზგასმა" + +#: data/ui/Shortcuts.ui:156 +msgctxt "shortcut window" +msgid "Copy and paste" +msgstr "კოპირეფა და ჩასმა" + +#: data/ui/Shortcuts.ui:160 +msgctxt "shortcut window" +msgid "Copy selected text to clipboard" +msgstr "არჩეული ტექსტის კოპირება" + +#: data/ui/Shortcuts.ui:167 +msgctxt "shortcut window" +msgid "Cut selected text to clipboard" +msgstr "არჩეული ტექსტის ამოჭრა" + +#: data/ui/Shortcuts.ui:174 +msgctxt "shortcut window" +msgid "Paste selected text from clipboard" +msgstr "არჩეული თექსტის ჩასმა" + +#: data/ui/Shortcuts.ui:183 +msgctxt "shortcut window" +msgid "Undo and redo" +msgstr "დაბრუნება და გამეორება" + +#: data/ui/Shortcuts.ui:187 +msgctxt "shortcut window" +msgid "Undo previous command" +msgstr "წინა ბრძანების დაბრუნება" + +#: data/ui/Shortcuts.ui:194 +msgctxt "shortcut window" +msgid "Redo previous command" +msgstr "წინა ბრძანების განმეორება" + +#: data/ui/Shortcuts.ui:203 +msgctxt "shortcut window" +msgid "Selection" +msgstr "არჩეული" + +#: data/ui/Shortcuts.ui:207 +msgctxt "shortcut window" +msgid "Select all text" +msgstr "მთელი ტექსტის არჩევა" + +#: data/ui/ThemeSwitcher.ui:22 +msgid "Use System Colors" +msgstr "სისტემის ფერევის ხმარება" + +#: data/ui/ThemeSwitcher.ui:51 +msgid "Use Light Colors" +msgstr "ღია ფერების ხმარება" + +#: data/ui/ThemeSwitcher.ui:80 +msgid "Use Sepia Colors" +msgstr "სეპია ფერების ხმარება" + +#: data/ui/ThemeSwitcher.ui:109 +msgid "Use Dark Colors" +msgstr "მუქი ფერების ხმარება" + +#: data/ui/Window.ui:69 +msgid "Show Statistics" +msgstr "სტატისტიკების ჩვენება" + +#: apostrophe/export_dialog.py:131 apostrophe/export_dialog.py:328 +#, python-format +msgid "Export to %s" +msgstr "ეხპორტირება %s-ში" + +#: apostrophe/export_dialog.py:158 apostrophe/export_dialog.py:358 +#, python-brace-format +msgid "" +"An error happened while trying to export:\n" +"\n" +"{err_msg}" +msgstr "" +"ექსპორტირების დროს მოხდა შეცდომა:\n" +"\n" +"{err_msg}" + +#: apostrophe/export_dialog.py:234 +msgid "Export to {}" +msgstr "ექსპორტირება {}-ში" + +#: apostrophe/export_dialog.py:324 +msgid "Select folder" +msgstr "საქაღალდეს არჩევა" + +#: apostrophe/helpers.py:89 +msgid "Error" +msgstr "შეცდომა" + +#: apostrophe/inhibitor.py:36 +msgid "Unsaved documents" +msgstr "არ-შენახული დოკუმენტები" + +#: apostrophe/inline_preview.py:200 +msgid "Formula looks incorrect:" +msgstr "ფორმულა არასწორად გამოიყურებაL" + +#: apostrophe/inline_preview.py:239 +msgid "No matching footnote found" +msgstr "შესატყვისი სქოლიო ვერ მოიძებნა" + +#: apostrophe/inline_preview.py:259 +msgid "noun" +msgstr "არსებითი სახელი" + +#: apostrophe/inline_preview.py:261 +msgid "verb" +msgstr "ზმნა" + +#: apostrophe/inline_preview.py:263 +msgid "adjective" +msgstr "ზედსართავი სახელი" + +#: apostrophe/inline_preview.py:265 +msgid "adverb" +msgstr "ზმნიზედა" + +#: apostrophe/main_window.py:327 +msgid "Save your File" +msgstr "ფაილის შენახვა" + +#: apostrophe/main_window.py:413 +msgid "Markdown Files" +msgstr "მარკდაუნის ფაილები" + +#: apostrophe/main_window.py:417 +msgid "Plain Text Files" +msgstr "ჩვეულებრივი ტექსტის ფაილები" + +#: apostrophe/main_window.py:420 +msgid "Open a .md file" +msgstr ".md ფაილის გახსნა" + +#: apostrophe/main_window.py:499 +#, python-format +msgid "Save changes to document “%s” before closing?" +msgstr "დახურვის წინ შეინახოს \"%s\" დოკუმენტის ცვლილებები?" + +#: apostrophe/main_window.py:504 +msgid "If you don’t save, all your changes will be permanently lost." +msgstr "თუ არ შეინახავთ, ყველა თქვენი ცვლილებები " + +#: apostrophe/main_window.py:507 +msgid "Close without saving" +msgstr "დახურვა შენახვის გარეშე" + +#: apostrophe/main_window.py:510 +msgid "Save now" +msgstr "შენახვა ახლავე" + +#: apostrophe/main_window.py:685 +msgid "New File" +msgstr "ახალი ფაილი" + +#: apostrophe/preview_layout_switcher.py:38 +msgid "Full-Width" +msgstr "მთელ-სიგანე" + +#: apostrophe/preview_layout_switcher.py:40 +msgid "Half-Width" +msgstr "ნახევარ-სიგანე" + +#: apostrophe/preview_layout_switcher.py:42 +msgid "Half-Height" +msgstr "ნახევარ-სიმაღლე" + +#: apostrophe/preview_layout_switcher.py:44 +msgid "Windowed" +msgstr "ცალკე ფანჯარა" + +#: apostrophe/stats_handler.py:75 +msgid "{:n} Character" +msgid_plural "{:n} Characters" +msgstr[0] "{:n} ასო" +msgstr[1] "{:n} ასო" + +#: apostrophe/stats_handler.py:77 +msgid "{:n} Word" +msgid_plural "{:n} Words" +msgstr[0] "{:n} სიტყვა" +msgstr[1] "{:n} სიტყვა" + +#: apostrophe/stats_handler.py:79 +msgid "{:n} Sentence" +msgid_plural "{:n} Sentences" +msgstr[0] "{:n} წინადადება" +msgstr[1] "{:n} წინადადება" + +#: apostrophe/stats_handler.py:81 +msgid "{:n} Paragraph" +msgid_plural "{:n} Paragraphs" +msgstr[0] "{:n} პარაგრაფი" +msgstr[1] "{:n} პარაგრაფი" + +#: apostrophe/stats_handler.py:83 +msgid "{:d}:{:02d}:{:02d} Read Time" +msgstr "{:d}:{:02d}:{:02d} კითხვის დრო" + +#: apostrophe/text_view_drag_drop_handler.py:75 +#: apostrophe/text_view_drag_drop_handler.py:77 +msgid "web page" +msgstr "ვებგვერდი" + +#: apostrophe/text_view_format_inserter.py:14 +msgid "italic text" +msgstr "დახრილი ტექსტი" + +#: apostrophe/text_view_format_inserter.py:19 +msgid "bold text" +msgstr "ბოლდური ტექსტი" + +#: apostrophe/text_view_format_inserter.py:24 +msgid "strikethrough text" +msgstr "ხაზგასმული ტექსტი" + +#: apostrophe/text_view_format_inserter.py:50 +msgid "Item" +msgstr "ელემენტი" + +#: apostrophe/text_view_format_inserter.py:98 +msgid "Header" +msgstr "სათაური" -- 2.40.1 From 7cb7447c55c28af17ef5bae56efe5351f5223b05 Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Sun, 12 Jun 2022 23:45:55 +0000 Subject: [PATCH 005/134] translation: Try to fix ka.po --- po/ka.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/po/ka.po b/po/ka.po index 3d657e2..58cbad9 100644 --- a/po/ka.po +++ b/po/ka.po @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-DL-Team: ka\n" "X-DL-Module: apostrophe\n" "X-DL-Branch: main\n" -- 2.40.1 From 4cc2b131f695bc86b43562413d27c8ca614f3387 Mon Sep 17 00:00:00 2001 From: Pawan Chitrakar Date: Wed, 15 Jun 2022 10:43:14 +0000 Subject: [PATCH 006/134] Add Nepali translation --- po/LINGUAS | 1 + po/ne.po | 827 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 828 insertions(+) create mode 100644 po/ne.po diff --git a/po/LINGUAS b/po/LINGUAS index 2758108..eeb0490 100644 --- a/po/LINGUAS +++ b/po/LINGUAS @@ -15,6 +15,7 @@ hu id it ka +ne nl oc pl diff --git a/po/ne.po b/po/ne.po new file mode 100644 index 0000000..42954a3 --- /dev/null +++ b/po/ne.po @@ -0,0 +1,827 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Nepali Gnome Translation\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/apostrophe/issues\n" +"POT-Creation-Date: 2022-06-07 04:09+0000\n" +"PO-Revision-Date: 2022-06-15 16:19+0545\n" +"Last-Translator: \n" +"Language-Team: Nepali \n" +"Language: ne\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.1\n" + +#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:3 +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:5 +#, fuzzy +msgid "Apostrophe" +msgstr "उद्धरण" + +#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! Do NOT translate "uberwriter" or "apostrophe"! The list MUST also end with a semicolon! +#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:5 +msgid "uberwriter;UberWriter;apostrophe;markdown;editor;text;write;" +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:6 +msgid "Apostrophe, an elegant, distraction-free markdown editor" +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 +#, fuzzy +msgid "Color scheme" +msgstr "रङ योजना" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:30 +msgid "Use the color scheme in the application's UI and in the text area." +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 +#: data/ui/Preferences.ui:23 data/ui/Preferences.ui:24 +#, fuzzy +msgid "Check spelling while typing" +msgstr "टाइप गर्दा हिज्जे जाँच गर्नुहोस्" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:37 +#, fuzzy +msgid "Enable or disable spellchecking." +msgstr "टाढाको लगइन सक्षम वा अक्षम पार्नुहोस्" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:43 +msgid "Synchronize editor/preview scrolling" +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:44 +msgid "Keep the editor and preview scroll positions in sync." +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 +#: data/ui/Preferences.ui:90 +#, fuzzy +msgid "Input format" +msgstr "ढाँचा…" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:51 +msgid "Input format to use when previewing and exporting using Pandoc." +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 +#, fuzzy +msgid "Autohide Headerbar" +msgstr "स्वत: लुकाउनुहोस्" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:58 +msgid "Hide the header and status bars when typing." +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:64 +#, fuzzy +msgid "Open file base path" +msgstr "फाइल [मार्ग]" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:65 +msgid "Open file paths of the current session" +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 +#, fuzzy +msgid "Default statistic" +msgstr "पुर्वनिर्धारित " + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:72 +msgid "Which statistic is shown on the main window." +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:78 +#, fuzzy +msgid "Characters per line" +msgstr "पङ्ति" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:79 +msgid "Maximum number of characters per line within the editor." +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 +#: data/ui/Headerbar.ui:250 +#, fuzzy +msgid "Hemingway Mode" +msgstr "मोड स्विच: मोड %d" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:86 +#, fuzzy +msgid "Whether the user can delete text or not." +msgstr "जब प्रयोगकर्ताद्वारा पाठ संशोधन गर्सकिन्छ" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:92 +#, fuzzy +msgid "Preview mode" +msgstr "पूर्वावलोकन छैन" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:93 +#, fuzzy +msgid "How to display the preview." +msgstr "पूर्वावलोकन छैन" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:99 +#, fuzzy +msgid "Preview active" +msgstr "पुर्वदृष्य औजार सक्रिय" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:100 +msgid "Whether showing of preview is active when launching a new window." +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:106 +#, fuzzy +msgid "Text size" +msgstr "फन्ट साइज बढाउनुहोस्" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:107 +#, fuzzy +msgid "Preferred relative size for the text." +msgstr "फन्ट साइज बढाउनुहोस्" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:6 +#, fuzzy +msgid "Edit Markdown in style" +msgstr "शैली:" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:8 +msgid "Focus on your writing with a clean, distraction-free markdown editor." +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:9 +msgid "Features:" +msgstr "विशेषता:" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:11 +msgid "An UI tailored to comfortable writing" +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:12 +#, fuzzy +msgid "A distraction-free mode" +msgstr "शैली" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:13 +msgid "Dark, light and sepia themes" +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:14 +msgid "" +"Everything you expect from a text editor, such as spellchecking or document " +"statistics" +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:15 +msgid "Live preview of what you write" +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:16 +msgid "" +"Export to all kind of formats: PDF, Word/Libreoffice, LaTeX, or even HTML " +"slideshows" +msgstr "" + +#: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:41 +msgid "Manuel G., Wolf V." +msgstr "" + +#: data/ui/About.ui.in:12 +msgid "Copyright (C) 2022, Manuel G., Wolf V." +msgstr "" + +#: data/ui/About.ui.in:14 +#, fuzzy +msgid "Apostrophe website" +msgstr "उद्धरण" + +#. Put your name in here, like this: +#. Manuel Genovés +#: data/ui/About.ui.in:20 +msgid "translator-credits" +msgstr "" +"translator-credits Pawan Chitrakar ,Jyotsna Shrestha " +", Nabin Gautam" + +#: data/ui/About.ui.in:65 +msgid "Donations:" +msgstr "" + +#: data/ui/About.ui.in:74 +msgid "Paypal" +msgstr "" + +#: data/ui/About.ui.in:105 +#, fuzzy +msgid "Help to translate:" +msgstr "मद्दत अनुवाद" + +#: data/ui/About.ui.in:114 +msgid "Damned Lies" +msgstr "" + +#: data/ui/Export.ui:46 apostrophe/export_dialog.py:133 +#: apostrophe/export_dialog.py:324 apostrophe/export_dialog.py:329 +#: apostrophe/main_window.py:330 apostrophe/main_window.py:423 +#: apostrophe/main_window.py:508 +msgid "Cancel" +msgstr "_रद्द" + +#: data/ui/Export.ui:61 apostrophe/export_dialog.py:128 +#: apostrophe/export_dialog.py:323 apostrophe/export_dialog.py:327 +msgid "Export" +msgstr "निर्यात गर्नुहोस्" + +#: data/ui/Export.ui:153 +#, fuzzy +msgid "Standalone" +msgstr "एक्लो हस्ताक्षर" + +#: data/ui/Export.ui:155 +msgid "" +"Use a header and footer to include things like stylesheets and meta " +"information" +msgstr "" + +#: data/ui/Export.ui:170 +#, fuzzy +msgid "Table of Contents" +msgstr "विषयसूची" + +#: data/ui/Export.ui:186 +#, fuzzy +msgid "Number Sections" +msgstr "सङ्ख्या" + +#: data/ui/Export.ui:210 data/ui/Export.ui:216 +msgid "Page Size" +msgstr "पन्नाको आकार" + +#: data/ui/Export.ui:235 +#, fuzzy +msgid "HTML Options" +msgstr "एचटीएमएल (HTML)" + +#: data/ui/Export.ui:241 +#, fuzzy +msgid "Self-contained" +msgstr "आफै" + +#: data/ui/Export.ui:243 +msgid "Produces an HTML file with no external dependencies" +msgstr "" + +#: data/ui/Export.ui:259 +#, fuzzy +msgid "CSS File" +msgstr "वेबसाइटहरू आफ्नै CSS परिमार्जन गर्न अनुकूल CSS फाइल प्रयोग गर्नुहोस्।" + +#: data/ui/Export.ui:264 +#, fuzzy +msgid "Select CSS file" +msgstr "CSS" + +#: data/ui/Export.ui:285 +msgid "Syntax Highlighting" +msgstr "विशेष चिन्हित वाक्य" + +#: data/ui/Export.ui:300 +#, fuzzy +msgid "Highlight style" +msgstr "हाइलाइट" + +#: data/ui/Export.ui:321 +msgid "Presentation" +msgstr "प्रस्तुतिकरण" + +#: data/ui/Export.ui:327 +#, fuzzy +msgid "Incremental bullets" +msgstr "गोली चिन्ह" + +#: data/ui/Export.ui:329 +msgid "Show one bullet point after another in a slideshow" +msgstr "" + +#: data/ui/Headerbar.ui:57 +msgid "New" +msgstr "नयाँ" + +#: data/ui/Headerbar.ui:67 apostrophe/main_window.py:422 +msgid "Open" +msgstr "खोल्नुहोस्:" + +#: data/ui/Headerbar.ui:90 apostrophe/main_window.py:329 +msgid "Save" +msgstr "सङ्ग्रह गर्नुहोस्" + +#: data/ui/Headerbar.ui:102 +#, fuzzy +msgid "Save as…" +msgstr "...यस रुपमा बचत गर्नुहोस्" + +#: data/ui/Headerbar.ui:140 +msgid "Menu" +msgstr "मेनु" + +#: data/ui/Headerbar.ui:166 +msgid "Find" +msgstr "खोज्नुस्" + +#: data/ui/Headerbar.ui:225 +msgid "New Window" +msgstr "नयाँ सञ्झ्याल" + +#: data/ui/Headerbar.ui:264 +#, fuzzy +msgid "Focus Mode" +msgstr "केन्द्रीयता मुद्रा" + +#: data/ui/Headerbar.ui:289 +msgid "Find and Replace" +msgstr "फेला पार्नुहोस् र प्रतिस्थापन गर्नुहोस्" + +#: data/ui/Headerbar.ui:314 +msgid "Preferences" +msgstr "प्राथमिकताहरू" + +#: data/ui/Headerbar.ui:339 +#, fuzzy +msgid "Open Tutorial" +msgstr "पाठ्य सन्देश बताउ ।" + +#: data/ui/Headerbar.ui:353 +msgid "Keyboard Shortcuts" +msgstr "कुञ्जीपाटी सर्टकट" + +#: data/ui/Headerbar.ui:367 +#, fuzzy +msgid "About Apostrophe" +msgstr "उद्धरण" + +#: data/ui/Headerbar.ui:395 +msgid "Save As…" +msgstr "...यस रुपमा बचत गर्नुहोस्" + +#: data/ui/Headerbar.ui:476 +#, fuzzy +msgid "Advanced Export…" +msgstr "निर्यात गर्नुहोस्…" + +#: data/ui/Headerbar.ui:501 +#, fuzzy +msgid "Copy HTML" +msgstr "HTML को रूपमा प्रतिलिपि बनाउनुहोस्" + +#: data/ui/Preferences.ui:40 +#, fuzzy +msgid "Autohide headerbar" +msgstr "स्वत: लुकाउनुहोस्" + +#: data/ui/Preferences.ui:41 +msgid "Autohide header and statusbars while typing" +msgstr "" + +#: data/ui/Preferences.ui:57 +#, fuzzy +msgid "Use bigger text" +msgstr "पाठ सम्पादकमा प्रयोग गर्नका लागि कुञ्जी बाइन्डिङ ।" + +#: data/ui/Preferences.ui:58 +msgid "Reduce the margins width and increase the text size when possible" +msgstr "" + +#: data/ui/Preferences.ui:72 +msgid "Restore session" +msgstr "सत्र पूर्वावस्थामा ल्याउनुहोस्" + +#: data/ui/Preferences.ui:73 +#, fuzzy +msgid "Return to your previous session when Apostrophe is started" +msgstr "पाठ सम्पादक सुरु भएको बेलामा तपाईँको अघिल्लो सत्रमा फर्कनुहोस्" + +#: data/ui/Preferences.ui:91 +msgid "Flavor of markdown Apostrophe will use" +msgstr "" + +#: data/ui/Preferences.ui:100 +#, fuzzy +msgid "Markdown flavor documentation" +msgstr "मिसिलिकरण" + +#: data/ui/PreviewLayoutSwitcher.ui:10 apostrophe/preview_renderer.py:210 +msgid "Preview" +msgstr "पूर्वावलोकन" + +#: data/ui/PreviewLayoutSwitcher.ui:32 +#, fuzzy +msgid "Screen Layout" +msgstr "ढाँचा" + +#: data/ui/Recents.ui:60 +msgid "No Recent Documents" +msgstr "हालको कागजात छैन" + +#: data/ui/Recents.ui:88 +msgid "No Results Found" +msgstr "नतिजा भेटिएन" + +#: data/ui/SearchBar.ui:50 +#, fuzzy +msgid "Previous Match" +msgstr "अघिल्लो फेला पार्नुहोस्" + +#: data/ui/SearchBar.ui:63 +#, fuzzy +msgid "Next Match" +msgstr "पछिल्लो जोडामा सार्नुहोस् (Ctrl+G)" + +#. Translators: This indicates case sensitivity, so it should be the first vowel of the language in lowercase and uppercase +#: data/ui/SearchBar.ui:85 +#, fuzzy +msgid "aA" +msgstr "पाठबाट थम्बनेल प्रतिमा (पूर्वनिर्धारित Aa)" + +#: data/ui/SearchBar.ui:89 +#, fuzzy +msgid "Case Sensitive" +msgstr "केस संवेदनशिल" + +#: data/ui/SearchBar.ui:99 +#, fuzzy +msgid "Regular Expression" +msgstr "नियमित अभिव्यक्तिको रूपमा जोडा मिलाउनुहोस्" + +#: data/ui/SearchBar.ui:111 data/ui/SearchBar.ui:165 +msgid "Replace" +msgstr "बदलनुहोस्" + +#: data/ui/SearchBar.ui:175 +msgid "Replace All" +msgstr "सबै बदलनुहोस्" + +#: data/ui/Shortcuts.ui:13 +msgctxt "shortcut window" +msgid "General" +msgstr "सामान्य" + +#: data/ui/Shortcuts.ui:17 +msgctxt "shortcut window" +msgid "New" +msgstr "नयाँ" + +#: data/ui/Shortcuts.ui:24 +msgctxt "shortcut window" +msgid "Open" +msgstr "खोल्नुहोस्:" + +#: data/ui/Shortcuts.ui:31 +msgctxt "shortcut window" +msgid "Save" +msgstr "सङ्ग्रह गर्नुहोस्" + +#: data/ui/Shortcuts.ui:38 +#, fuzzy +msgctxt "shortcut window" +msgid "Save as" +msgstr "...यस रुपमा बचत गर्नुहोस्" + +#: data/ui/Shortcuts.ui:45 +msgctxt "shortcut window" +msgid "Close document" +msgstr "कागजात बन्द गर्नुहोस्" + +#: data/ui/Shortcuts.ui:52 +#, fuzzy +msgctxt "shortcut window" +msgid "Quit application" +msgstr "अनुप्रयोग अन्त्य गर्नुहोस्" + +#: data/ui/Shortcuts.ui:61 +#, fuzzy +msgctxt "shortcut window" +msgid "Modes" +msgstr "कुनै पनि चयन गरियेका मोडहरु संभावित %s मोडहरु संग मिलेनन्" + +#: data/ui/Shortcuts.ui:65 +msgctxt "shortcut window" +msgid "Focus mode" +msgstr "केन्द्रीयता मुद्रा" + +#: data/ui/Shortcuts.ui:72 +#, fuzzy +msgctxt "shortcut window" +msgid "Hemingway mode" +msgstr "मोड स्विच: मोड %d" + +#: data/ui/Shortcuts.ui:79 +msgctxt "shortcut window" +msgid "Preview" +msgstr "पूर्वावलोकन" + +#: data/ui/Shortcuts.ui:86 +msgctxt "shortcut window" +msgid "Fullscreen" +msgstr "पूरा पर्दा" + +#: data/ui/Shortcuts.ui:95 data/ui/Shortcuts.ui:99 +msgctxt "shortcut window" +msgid "Find" +msgstr "खोज्नुस्" + +#: data/ui/Shortcuts.ui:106 +msgctxt "shortcut window" +msgid "Find and replace" +msgstr "फेला पार्नुहोस् र प्रतिस्थापन गर्नुहोस्" + +#: data/ui/Shortcuts.ui:115 +msgctxt "shortcut window" +msgid "Markdown" +msgstr "" + +#: data/ui/Shortcuts.ui:119 +msgctxt "shortcut window" +msgid "Separator" +msgstr "विभाजक" + +#: data/ui/Shortcuts.ui:126 +#, fuzzy +msgctxt "shortcut window" +msgid "List item" +msgstr "सुची सामाग्री" + +#: data/ui/Shortcuts.ui:133 +msgctxt "shortcut window" +msgid "Italic" +msgstr "छड्के" + +#: data/ui/Shortcuts.ui:140 +msgctxt "shortcut window" +msgid "Bold" +msgstr "बाक्लो" + +#: data/ui/Shortcuts.ui:147 +msgctxt "shortcut window" +msgid "Strikeout" +msgstr "" + +#: data/ui/Shortcuts.ui:156 +#, fuzzy +msgctxt "shortcut window" +msgid "Copy and paste" +msgstr "प्रतिलिपि बनाउनुहोस् र टाँस्नुहोस्" + +#: data/ui/Shortcuts.ui:160 +msgctxt "shortcut window" +msgid "Copy selected text to clipboard" +msgstr "चयन गरिएको पाठ क्लिपबोर्डमा प्रतिलिपि बनाउनुहोस्" + +#: data/ui/Shortcuts.ui:167 +msgctxt "shortcut window" +msgid "Cut selected text to clipboard" +msgstr "क्लिपबोर्डमा चयन गरिएको पाठ काट्नुहोस्" + +#: data/ui/Shortcuts.ui:174 +#, fuzzy +msgctxt "shortcut window" +msgid "Paste selected text from clipboard" +msgstr "क्लिपबोर्डबाट पाठ टाँस्नुहोस्" + +#: data/ui/Shortcuts.ui:183 +#, fuzzy +msgctxt "shortcut window" +msgid "Undo and redo" +msgstr "सम्पादन योग्यका लागि यदि यसलाई पुन: सुधार गर्नुहोस्/सक्षम पारियो भने" + +#: data/ui/Shortcuts.ui:187 +msgctxt "shortcut window" +msgid "Undo previous command" +msgstr "अघिल्लो आदेश फर्किनुहोस्" + +#: data/ui/Shortcuts.ui:194 +msgctxt "shortcut window" +msgid "Redo previous command" +msgstr "अघिल्लो आदेश फेरी गर्नुहोस्" + +#: data/ui/Shortcuts.ui:203 +msgctxt "shortcut window" +msgid "Selection" +msgstr "चयन" + +#: data/ui/Shortcuts.ui:207 +msgctxt "shortcut window" +msgid "Select all text" +msgstr "सबै पाठ चयन गर्नुहोस्" + +#: data/ui/ThemeSwitcher.ui:22 +msgid "Use System Colors" +msgstr "प्रणाली रङ प्रयोग गर्नुहोस्" + +#: data/ui/ThemeSwitcher.ui:51 +msgid "Use Light Colors" +msgstr "हल्का रङ प्रयोग गर्नुहोस्" + +#: data/ui/ThemeSwitcher.ui:80 +#, fuzzy +msgid "Use Sepia Colors" +msgstr "प्रणाली रङ प्रयोग गर्नुहोस्" + +#: data/ui/ThemeSwitcher.ui:109 +msgid "Use Dark Colors" +msgstr "गाढा रङप्रयोग गर्नुहोस्" + +#: data/ui/Window.ui:71 +#, fuzzy +msgid "Show Statistics" +msgstr "खेल खेलिएको तथ्याङ्क देखाउनुहोस्" + +#: apostrophe/export_dialog.py:131 apostrophe/export_dialog.py:328 +#, fuzzy, python-format +msgid "Export to %s" +msgstr "अज्ञात वा असमर्थित कागजात निर्यात ढाँचा '%s'।" + +#: apostrophe/export_dialog.py:158 apostrophe/export_dialog.py:358 +#, python-brace-format +msgid "" +"An error happened while trying to export:\n" +"\n" +"{err_msg}" +msgstr "" + +#: apostrophe/export_dialog.py:234 +#, fuzzy +msgid "Export to {}" +msgstr "निर्यात गर्नुहोस्…" + +#: apostrophe/export_dialog.py:324 +msgid "Select folder" +msgstr "फोल्डर चयन गर्नुहोस्" + +#: apostrophe/helpers.py:89 +msgid "Error" +msgstr "त्रुटी" + +#: apostrophe/inhibitor.py:36 +#, fuzzy +msgid "Unsaved documents" +msgstr "कागजातहरू" + +#: apostrophe/inline_preview.py:200 +#, fuzzy +msgid "Formula looks incorrect:" +msgstr "सूत्र छ ।" + +#: apostrophe/inline_preview.py:239 +#, fuzzy +msgid "No matching footnote found" +msgstr "कुनै मिल्दो मद्दत पृष्ठ फेला परेन।" + +#: apostrophe/inline_preview.py:259 +msgid "noun" +msgstr "" + +#: apostrophe/inline_preview.py:261 +#, fuzzy +msgid "verb" +msgstr "(*क्रिया) पहिचान गरिएको छैन" + +#: apostrophe/inline_preview.py:263 +msgid "adjective" +msgstr "" + +#: apostrophe/inline_preview.py:265 +msgid "adverb" +msgstr "" + +#: apostrophe/main_window.py:326 +#, fuzzy +msgid "Save your File" +msgstr "यस रूपमा फाइल बचत गर्नुहोस्" + +#: apostrophe/main_window.py:412 +#, fuzzy +msgid "Markdown Files" +msgstr "फाइलहरू:" + +#: apostrophe/main_window.py:416 +#, fuzzy +msgid "Plain Text Files" +msgstr "सादा पाठ" + +#: apostrophe/main_window.py:419 +#, fuzzy +msgid "Open a .md file" +msgstr "एउटा फाइल खोल्नुहोस्" + +#: apostrophe/main_window.py:498 +#, fuzzy, python-format +msgid "Save changes to document “%s” before closing?" +msgstr "बन्द गर्नु भन्दा पहिले छवि \"%s\" मा परिवर्तनहरू बचत गर्नुहुन्छ?" + +#: apostrophe/main_window.py:503 +#, fuzzy +msgid "If you don’t save, all your changes will be permanently lost." +msgstr "यदि तपाईँले बचत गर्नुभएन भने, तपाईँका परिवर्तनहरू हराउने छन् ।" + +#: apostrophe/main_window.py:506 +#, fuzzy +msgid "Close without saving" +msgstr "बचत नगरी बन्द गर्नुहोस्" + +#: apostrophe/main_window.py:509 +#, fuzzy +msgid "Save now" +msgstr "अहिले होईन" + +#: apostrophe/main_window.py:686 +msgid "New File" +msgstr "नयाँ फाइल" + +#: apostrophe/preview_layout_switcher.py:38 +#, fuzzy +msgid "Full-Width" +msgstr "पूरा" + +#: apostrophe/preview_layout_switcher.py:40 +#, fuzzy +msgid "Half-Width" +msgstr "आधा" + +#: apostrophe/preview_layout_switcher.py:42 +#, fuzzy +msgid "Half-Height" +msgstr "आधा" + +#: apostrophe/preview_layout_switcher.py:44 +#, fuzzy +msgid "Windowed" +msgstr "पूरा स्क्रिन छोडेर सञ्झ्याल रूपमा जानहोस" + +#: apostrophe/stats_handler.py:75 +#, fuzzy +msgid "{:n} Character" +msgid_plural "{:n} Characters" +msgstr[0] "क्यारेक्टर" +msgstr[1] "वर्ण" + +#: apostrophe/stats_handler.py:77 +#, fuzzy +msgid "{:n} Word" +msgid_plural "{:n} Words" +msgstr[0] "शब्द" +msgstr[1] "एन/ए" + +#: apostrophe/stats_handler.py:79 +#, fuzzy +msgid "{:n} Sentence" +msgid_plural "{:n} Sentences" +msgstr[0] "वाक्य" +msgstr[1] "एन/ए" + +#: apostrophe/stats_handler.py:81 +#, fuzzy +msgid "{:n} Paragraph" +msgid_plural "{:n} Paragraphs" +msgstr[0] "अनुच्छेद" +msgstr[1] "अनुच्छेदहरू" + +#: apostrophe/stats_handler.py:83 +#, fuzzy +msgid "{:d}:{:02d}:{:02d} Read Time" +msgstr "%d:%02d:%02d" + +#: apostrophe/text_view_drag_drop_handler.py:75 +#: apostrophe/text_view_drag_drop_handler.py:77 +#, fuzzy +msgid "web page" +msgstr "वेब पृष्ठ" + +#: apostrophe/text_view_format_inserter.py:14 +#, fuzzy +msgid "italic text" +msgstr "छड्के" + +#: apostrophe/text_view_format_inserter.py:19 +#, fuzzy +msgid "bold text" +msgstr "बाक्लो पाठले सामान्य पाठमा समान रङ प्रयोग गर्नु पर्दछ या पर्दैन" + +#: apostrophe/text_view_format_inserter.py:24 +#, fuzzy +msgid "strikethrough text" +msgstr "अक्षरलाई बीचमा काटनु" + +#: apostrophe/text_view_format_inserter.py:50 +msgid "Item" +msgstr "सामाग्री" + +#: apostrophe/text_view_format_inserter.py:98 +msgid "Header" +msgstr "हेडर" -- 2.40.1 From 1b63f2c9cc1d6e8ffadc7db1568dbd89d5d1c5bc Mon Sep 17 00:00:00 2001 From: Danial Behzadi Date: Tue, 28 Jun 2022 11:15:10 +0000 Subject: [PATCH 007/134] Update Persian translation --- po/fa.po | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/po/fa.po b/po/fa.po index a6432bc..f321767 100644 --- a/po/fa.po +++ b/po/fa.po @@ -7,32 +7,32 @@ msgid "" msgstr "" "Project-Id-Version: apostrophe main\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/apostrophe/issues\n" -"POT-Creation-Date: 2022-04-07 17:52+0000\n" -"PO-Revision-Date: 2022-04-21 19:52+0430\n" -"Last-Translator: MohammadSaleh Kamyab \n" +"POT-Creation-Date: 2022-05-05 09:44+0000\n" +"PO-Revision-Date: 2022-06-28 15:44+0430\n" +"Last-Translator: Danial Behzadi \n" "Language-Team: Persian \n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.0.1\n" +"X-Generator: Poedit 3.1\n" #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:3 #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:5 msgid "Apostrophe" -msgstr "آپوستروف" +msgstr "آپاستروف" #. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! Do NOT translate "uberwriter" or "apostrophe"! The list MUST also end with a semicolon! #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:5 msgid "uberwriter;UberWriter;apostrophe;markdown;editor;text;write;" msgstr "" "uberwriter;UberWriter;apostrophe;markdown;editor;text;write;اوبررایتر;اوبر " -"رایتر;آپوستروف;اپوستروف;مارک‌دان;مارک‌داون;مارک‌دون;ویرایشگر;ادیتور;متن;نوشتن;" +"رایتر;آپاستروف;آپوستروف;مارک‌دان;مارک‌داون;مارک‌دون;ویرایشگر;ادیتور;متن;نوشتن;" #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:6 msgid "Apostrophe, an elegant, distraction-free markdown editor" -msgstr "آپوستروف؛ یک ویرایشگر مارک‌دون شیک و بدون حواس‌پرتی" +msgstr "آپاستروف؛ ویرایشگر مارک‌دونی شیک و بدون حواس‌پرتی" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 msgid "Color scheme" @@ -42,8 +42,8 @@ msgstr "شمای رنگی" msgid "Use the color scheme in the application's UI and in the text area." msgstr "استفاده از شمای رنگی در رابط کاربری برنامه و ناحیهٔ متن." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 -#: data/ui/Preferences.ui:23 data/ui/Preferences.ui:24 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 data/ui/Preferences.ui:23 +#: data/ui/Preferences.ui:24 msgid "Check spelling while typing" msgstr "بررسی املایی هنگام نوشتن" @@ -59,8 +59,7 @@ msgstr "همگام‌سازی پیمایش ویرایشگر/پیش‌نمایش" msgid "Keep the editor and preview scroll positions in sync." msgstr "پیمایش ویرایشگر و پیش‌نمایش را همگام نگه می‌دارد." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 -#: data/ui/Preferences.ui:90 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 data/ui/Preferences.ui:90 msgid "Input format" msgstr "قالب ورودی" @@ -100,8 +99,7 @@ msgstr "نویسه در خط" msgid "Maximum number of characters per line within the editor." msgstr "بیشینهٔ تعداد نویسه‌ها در هر خط در ویرایشگر." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 -#: data/ui/Headerbar.ui:250 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 data/ui/Headerbar.ui:250 msgid "Hemingway Mode" msgstr "حالت همینگ‌وی" @@ -227,10 +225,8 @@ msgstr "تنها" #: data/ui/Export.ui:155 msgid "" -"Use a header and footer to include things like stylesheets and meta " -"information" -msgstr "" -"استفاده از یک سرایند و پاورقی برای شمول چیزهایی مثل سبک‌برگ‌ها و فراداده‌ها" +"Use a header and footer to include things like stylesheets and meta information" +msgstr "استفاده از یک سرایند و پاورقی برای شمول چیزهایی مثل سبک‌برگ‌ها و فراداده‌ها" #: data/ui/Export.ui:170 msgid "Table of Contents" @@ -278,11 +274,11 @@ msgstr "ارائه" #: data/ui/Export.ui:327 msgid "Incremental bullets" -msgstr "" +msgstr "گلوله‌های افزایشی" #: data/ui/Export.ui:329 msgid "Show one bullet point after another in a slideshow" -msgstr "" +msgstr "نمایش گلوله‌ای پس از دیگری در نمایش اسلاید" #: data/ui/Headerbar.ui:57 msgid "New" @@ -586,7 +582,7 @@ msgstr "استفاده از رنگ‌های سوبیایی" msgid "Use Dark Colors" msgstr "استفاده از رنگ‌های تاریک" -#: data/ui/Window.ui:69 +#: data/ui/Window.ui:71 msgid "Show Statistics" msgstr "نمایش آمار" -- 2.40.1 From 4f8c41fc2feb22c0c18431f020b57c951ae25788 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Benvenuti?= Date: Sat, 9 Jul 2022 09:46:40 +0000 Subject: [PATCH 008/134] Update German translation --- po/de.po | 78 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/po/de.po b/po/de.po index 2ec670e..8451a05 100644 --- a/po/de.po +++ b/po/de.po @@ -4,21 +4,22 @@ # Christian Kirbach , 2021. # Philipp Kiemle , 2022. # Tim Sabsch , 2022. +# Jürgen Benvenuti , 2022. # msgid "" msgstr "" "Project-Id-Version: Apostrophe\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/apostrophe/issues\n" -"POT-Creation-Date: 2022-03-15 21:52+0000\n" -"PO-Revision-Date: 2022-03-22 10:59+0100\n" -"Last-Translator: Tim Sabsch \n" +"POT-Creation-Date: 2022-06-28 11:15+0000\n" +"PO-Revision-Date: 2022-07-08 19:56+0200\n" +"Last-Translator: Jürgen Benvenuti \n" "Language-Team: German - Germany \n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.0.1\n" +"X-Generator: Poedit 3.1\n" "X-DL-Team: de\n" "X-DL-Module: apostrophe\n" "X-DL-Branch: main\n" @@ -33,7 +34,9 @@ msgstr "Apostrophe" #. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! Do NOT translate "uberwriter" or "apostrophe"! The list MUST also end with a semicolon! #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:5 msgid "uberwriter;UberWriter;apostrophe;markdown;editor;text;write;" -msgstr "uberwriter;UberWriter;apostrophe;markdown;editor;text;write;schreiben;" +msgstr "" +"uberwriter;UberWriter;apostrophe;markdown;editor;text;write;schreiben;" +"Markdown;" #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:6 msgid "Apostrophe, an elegant, distraction-free markdown editor" @@ -43,10 +46,9 @@ msgstr "Apostrophe, ein einfacher und ablenkungsfreier Markdown-Editor" msgid "Color scheme" msgstr "Farbschema" -# „Textbereich“? #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:30 msgid "Use the color scheme in the application's UI and in the text area." -msgstr "Das Farbschema in der Benutzeroberfläche und im Textbereich verwenden." +msgstr "Das Farbschema in der Benutzeroberfläche und im Editor verwenden." #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 #: data/ui/Preferences.ui:23 data/ui/Preferences.ui:24 @@ -72,7 +74,8 @@ msgstr "Eingabeformat" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:51 msgid "Input format to use when previewing and exporting using Pandoc." -msgstr "Benutztes Eingabeformat für die Vorschau oder Export mittels Pandoc." +msgstr "" +"Benutztes Eingabeformat für die Vorschau oder den Export mittels Pandoc." #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 msgid "Autohide Headerbar" @@ -141,7 +144,7 @@ msgstr "Bevorzugte relative Größe des Textes." #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:6 msgid "Edit Markdown in style" -msgstr "Markdown mit Stil bearbeiten" +msgstr "Bearbeiten Sie Markdown mit Stil" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:8 msgid "Focus on your writing with a clean, distraction-free markdown editor." @@ -206,7 +209,8 @@ msgstr "" "Marko Semet \n" "Christian Kirbach \n" "Philipp Kiemle \n" -"Tim Sabsch " +"Tim Sabsch \n" +"Jürgen Benvenuti " #: data/ui/About.ui.in:65 msgid "Donations:" @@ -218,7 +222,7 @@ msgstr "Paypal" #: data/ui/About.ui.in:105 msgid "Help to translate:" -msgstr "Hilf uns das Programm zu übersetzen:" +msgstr "Helfen Sie uns, das Programm zu übersetzen:" #: data/ui/About.ui.in:114 msgid "Damned Lies" @@ -226,8 +230,8 @@ msgstr "Verdammte Lügen" #: data/ui/Export.ui:46 apostrophe/export_dialog.py:133 #: apostrophe/export_dialog.py:324 apostrophe/export_dialog.py:329 -#: apostrophe/main_window.py:331 apostrophe/main_window.py:424 -#: apostrophe/main_window.py:509 +#: apostrophe/main_window.py:330 apostrophe/main_window.py:423 +#: apostrophe/main_window.py:508 msgid "Cancel" msgstr "Abbrechen" @@ -294,27 +298,27 @@ msgstr "Präsentation" #: data/ui/Export.ui:327 msgid "Incremental bullets" -msgstr "Nummerierung" +msgstr "Schrittweise Auflistung" #: data/ui/Export.ui:329 msgid "Show one bullet point after another in a slideshow" -msgstr "Listenpunkte nacheinander in einer Diashow anzeigen" +msgstr "Listenpunkte nacheinander in einer Dia-Show anzeigen" #: data/ui/Headerbar.ui:57 msgid "New" msgstr "Neu" -#: data/ui/Headerbar.ui:67 apostrophe/main_window.py:423 +#: data/ui/Headerbar.ui:67 apostrophe/main_window.py:422 msgid "Open" msgstr "Öffnen" -#: data/ui/Headerbar.ui:90 apostrophe/main_window.py:330 +#: data/ui/Headerbar.ui:90 apostrophe/main_window.py:329 msgid "Save" msgstr "Speichern" #: data/ui/Headerbar.ui:102 msgid "Save as…" -msgstr "Speichern unter …" +msgstr "Speichern unter …" #: data/ui/Headerbar.ui:140 msgid "Menu" @@ -346,15 +350,15 @@ msgstr "Tutorial öffnen" #: data/ui/Headerbar.ui:353 msgid "Keyboard Shortcuts" -msgstr "Tastenkürzel" +msgstr "Tastenkombinationen" #: data/ui/Headerbar.ui:367 msgid "About Apostrophe" -msgstr "Über Apostrophe" +msgstr "Info zu Apostrophe" #: data/ui/Headerbar.ui:395 msgid "Save As…" -msgstr "Speichern unter …" +msgstr "Speichern unter …" #: data/ui/Headerbar.ui:476 msgid "Advanced Export…" @@ -396,7 +400,7 @@ msgstr "Markdown-Variante, die Apostrophe nutzen wird" msgid "Markdown flavor documentation" msgstr "Dokumentation zur Markdown-Variante" -#: data/ui/PreviewLayoutSwitcher.ui:10 data/ui/PreviewWindow.ui:13 +#: data/ui/PreviewLayoutSwitcher.ui:10 apostrophe/preview_renderer.py:210 msgid "Preview" msgstr "Vorschau" @@ -549,12 +553,12 @@ msgstr "Kopieren und Einfügen" #: data/ui/Shortcuts.ui:160 msgctxt "shortcut window" msgid "Copy selected text to clipboard" -msgstr "Ausgewählten Text kopieren" +msgstr "Ausgewählten Text in die Zwischenablage kopieren" #: data/ui/Shortcuts.ui:167 msgctxt "shortcut window" msgid "Cut selected text to clipboard" -msgstr "Ausgewählten Text ausschneiden" +msgstr "Ausgewählten Text in die Zwischenablage ausschneiden" #: data/ui/Shortcuts.ui:174 msgctxt "shortcut window" @@ -574,7 +578,7 @@ msgstr "Den letzten Befehl rückgängig machen" #: data/ui/Shortcuts.ui:194 msgctxt "shortcut window" msgid "Redo previous command" -msgstr "Letzten Befehl wiederholen" +msgstr "Den letzten Befehl wiederholen" #: data/ui/Shortcuts.ui:203 msgctxt "shortcut window" @@ -602,7 +606,7 @@ msgstr "Sepia-Farben verwenden" msgid "Use Dark Colors" msgstr "Dunkle Farben verwenden" -#: data/ui/Window.ui:69 +#: data/ui/Window.ui:71 msgid "Show Statistics" msgstr "Statistik anzeigen" @@ -640,7 +644,7 @@ msgstr "Nicht gespeicherte Dokumente" #: apostrophe/inline_preview.py:200 msgid "Formula looks incorrect:" -msgstr "Formel ist scheinbar falsch:" +msgstr "Formel sieht falsch aus:" #: apostrophe/inline_preview.py:239 msgid "No matching footnote found" @@ -662,41 +666,41 @@ msgstr "Adjektiv" msgid "adverb" msgstr "Adverb" -#: apostrophe/main_window.py:327 +#: apostrophe/main_window.py:326 msgid "Save your File" msgstr "Datei speichern" -#: apostrophe/main_window.py:413 +#: apostrophe/main_window.py:412 msgid "Markdown Files" msgstr "Markdown-Dateien" -#: apostrophe/main_window.py:417 +#: apostrophe/main_window.py:416 msgid "Plain Text Files" msgstr "Einfache Textdateien" -#: apostrophe/main_window.py:420 +#: apostrophe/main_window.py:419 msgid "Open a .md file" msgstr "Eine ».md«-Datei öffnen" -#: apostrophe/main_window.py:499 +#: apostrophe/main_window.py:498 #, python-format msgid "Save changes to document “%s” before closing?" msgstr "Änderungen am Dokument »%s« vor dem Beenden speichern?" -#: apostrophe/main_window.py:504 +#: apostrophe/main_window.py:503 msgid "If you don’t save, all your changes will be permanently lost." msgstr "" -"Wenn Sie nicht speichern, werden alle Veränderungen unwiderruflich verworfen." +"Wenn Sie nicht speichern, werden alle Änderungen unwiderruflich verworfen." -#: apostrophe/main_window.py:507 +#: apostrophe/main_window.py:506 msgid "Close without saving" msgstr "Schließen ohne zu speichern" -#: apostrophe/main_window.py:510 +#: apostrophe/main_window.py:509 msgid "Save now" msgstr "Jetzt speichern" -#: apostrophe/main_window.py:685 +#: apostrophe/main_window.py:686 msgid "New File" msgstr "Neue Datei" -- 2.40.1 From 7807c7e1d1ce5ac61bcb98c8863fd8cc8bd93516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Piotrowski?= Date: Wed, 27 Jul 2022 12:28:10 +0200 Subject: [PATCH 009/134] Drop or update image definition from Flatpak job The gnome-runtime-images have been recently migrated to Quay. Please note this MR has been created semi-automatically. If it doesn't make sense, feel free to close it. --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8ecdd3c..0a1b2f7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,7 @@ include: 'https://gitlab.gnome.org/GNOME/citemplates/raw/master/flatpak/flatpak_ci_initiative.yml' flatpak: - image: 'registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:41' + image: 'quay.io/gnome_infrastructure/gnome-runtime-images:gnome-41' variables: MANIFEST_PATH: "build-aux/flatpak/org.gnome.gitlab.somas.Apostrophe.json" MESON_ARGS: "-Dprofile=Devel" -- 2.40.1 From 35d150aca76080ee8b6e53b79d555ea7e29317ef Mon Sep 17 00:00:00 2001 From: Jordi Mas i Hernandez Date: Mon, 1 Aug 2022 21:26:34 +0000 Subject: [PATCH 010/134] Update Catalan translation --- po/ca.po | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/po/ca.po b/po/ca.po index 1c1d3d4..16cd3b0 100644 --- a/po/ca.po +++ b/po/ca.po @@ -4,8 +4,8 @@ msgstr "" "Project-Id-Version: Apostrophe\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/apostrophe/issues\n" "POT-Creation-Date: 2022-03-07 19:03+0000\n" -"PO-Revision-Date: 2022-04-17 19:03+0000\n" -"Last-Translator: Jordi Mas \n" +"PO-Revision-Date: 2022-08-01 19:03+0000\n" +"Last-Translator: Jordi Mas i Hernàndez \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" @@ -84,7 +84,7 @@ msgstr "Obre el recorregut del fitxer de la sessió actual" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 msgid "Default statistic" -msgstr "estadística predeterminada" +msgstr "Estadística predeterminada" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:72 msgid "Which statistic is shown on the main window." @@ -302,7 +302,7 @@ msgstr "Desa" #: data/ui/Headerbar.ui:102 msgid "Save as…" -msgstr "Anomena i desa..." +msgstr "Anomena i desa…" #: data/ui/Headerbar.ui:140 msgid "Menu" @@ -530,7 +530,7 @@ msgstr "Negreta" #: data/ui/Shortcuts.ui:147 msgctxt "shortcut window" msgid "Strikeout" -msgstr "Tancar finestra" +msgstr "Barrat" #: data/ui/Shortcuts.ui:156 msgctxt "shortcut window" @@ -575,7 +575,7 @@ msgstr "Selecció" #: data/ui/Shortcuts.ui:207 msgctxt "shortcut window" msgid "Select all text" -msgstr "Seleccionar tot el text" +msgstr "Selecciona tot el text" #: data/ui/ThemeSwitcher.ui:22 msgid "Use System Colors" @@ -659,7 +659,7 @@ msgstr "Deseu el vostre fitxer" #: apostrophe/main_window.py:413 msgid "Markdown Files" -msgstr "Fitxer \"Markdown\"" +msgstr "Fitxers Markdown" #: apostrophe/main_window.py:417 msgid "Plain Text Files" @@ -676,11 +676,11 @@ msgstr "Voleu desar els canvis al document «%s» abans de tancar?" #: apostrophe/main_window.py:504 msgid "If you don’t save, all your changes will be permanently lost." -msgstr "Si no deses tots els canvis es perdran de manera permanent." +msgstr "Si no deseu tots els canvis, es perdran de manera permanent." #: apostrophe/main_window.py:507 msgid "Close without saving" -msgstr "Tancar sense desar" +msgstr "Tanca sense desar" #: apostrophe/main_window.py:510 msgid "Save now" @@ -745,15 +745,15 @@ msgstr "Text en cursiva" #: apostrophe/text_view_format_inserter.py:19 msgid "bold text" -msgstr "Text en negreta" +msgstr "text en negreta" #: apostrophe/text_view_format_inserter.py:24 msgid "strikethrough text" -msgstr "Ratlla el text" +msgstr "ratlla el text" #: apostrophe/text_view_format_inserter.py:50 msgid "Item" -msgstr "Item" +msgstr "Ítem" #: apostrophe/text_view_format_inserter.py:98 msgid "Header" -- 2.40.1 From b5b9ed463615a86e269427d49d273390ba706406 Mon Sep 17 00:00:00 2001 From: Ask Hjorth Larsen Date: Thu, 4 Aug 2022 11:49:52 +0000 Subject: [PATCH 011/134] Update Danish translation --- po/da.po | 458 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 277 insertions(+), 181 deletions(-) diff --git a/po/da.po b/po/da.po index 194a7ca..9afa375 100644 --- a/po/da.po +++ b/po/da.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: apostrophe main\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/apostrophe/issues\n" -"POT-Creation-Date: 2022-02-03 18:34+0000\n" -"PO-Revision-Date: 2022-03-08 00:33+0100\n" +"POT-Creation-Date: 2022-07-09 09:46+0000\n" +"PO-Revision-Date: 2022-07-29 14:39+0200\n" "Last-Translator: Ask Hjorth Larsen \n" "Language-Team: Danish \n" "Language: da\n" @@ -22,97 +22,124 @@ msgstr "" msgid "Apostrophe" msgstr "Apostrophe" -#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! +#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! Do NOT translate "uberwriter" or "apostrophe"! The list MUST also end with a semicolon! #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:5 -msgid "uberwriter;UberWriter;apostrophe;markdown;editor;" -msgstr "uberwriter;UberWriter;apostrophe;markdown;editor;redigering;" +msgid "uberwriter;UberWriter;apostrophe;markdown;editor;text;write;" +msgstr "uberwriter;UberWriter;apostrophe;markdown;editor;redigering;tekst;skriv;skrive;" #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:6 msgid "Apostrophe, an elegant, distraction-free markdown editor" msgstr "Apostrophe, elegant markdownredigering uden distraktioner" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:28 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 msgid "Color scheme" msgstr "Farveskema" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:30 msgid "Use the color scheme in the application's UI and in the text area." msgstr "Brug farveskemaet i programmets brugerflade og i tekstområdet." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:35 -#: data/ui/Preferences.ui:49 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 +#: data/ui/Preferences.ui:23 data/ui/Preferences.ui:24 msgid "Check spelling while typing" msgstr "Løbende stavekontrol" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:37 msgid "Enable or disable spellchecking." msgstr "Slå stavekontrol til eller fra." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:42 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:43 msgid "Synchronize editor/preview scrolling" msgstr "Synkronisér rulning ved redigering/forhåndsvisning" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:43 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:44 msgid "Keep the editor and preview scroll positions in sync." msgstr "Behold altid samme rulleposition i redigering og forhåndsvisning." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:49 -#: data/ui/Preferences.ui:73 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 +#: data/ui/Preferences.ui:90 msgid "Input format" msgstr "Inputformat" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:51 msgid "Input format to use when previewing and exporting using Pandoc." msgstr "Inputformat til forhåndsvisning og eksport med Pandoc." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:56 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 msgid "Autohide Headerbar" msgstr "Skjul automatisk titellinje" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:58 msgid "Hide the header and status bars when typing." msgstr "Skjul titel- og statuslinje ved indtastning." # Ikke sikker. Det er gschema (konfigurationsstrenge) så ikke særligt synlige, så det er måske ikke kritisk. -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:63 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:64 msgid "Open file base path" msgstr "Åbn basissti for filer" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:64 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:65 msgid "Open file paths of the current session" msgstr "Åbn filstier for nuværende session" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:70 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 msgid "Default statistic" msgstr "Standardstatistik" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:72 msgid "Which statistic is shown on the main window." msgstr "Hvilken statistik der vises i hovedvinduet." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:77 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:78 msgid "Characters per line" msgstr "Tegn per linje" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:78 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:79 msgid "Maximum number of characters per line within the editor." msgstr "Maksimalt antal tegn per linje i redigering." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:84 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 +#: data/ui/Headerbar.ui:250 +msgid "Hemingway Mode" +msgstr "Hemingway-tilstand" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:86 +msgid "Whether the user can delete text or not." +msgstr "Om brugeren kan slette tekst." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:92 msgid "Preview mode" msgstr "Tilstand for forhåndsvisning" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:93 msgid "How to display the preview." msgstr "Hvordan forhåndsvisningen vises." +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:99 +msgid "Preview active" +msgstr "Forhåndsvisning aktiveret" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:100 +msgid "Whether showing of preview is active when launching a new window." +msgstr "Om forhåndsvisning er aktiv, når et nyt vindue vises." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:106 +msgid "Text size" +msgstr "Tekststørrelse" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:107 +msgid "Preferred relative size for the text." +msgstr "Foretrukken relativ størrelse for teksten." + #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:6 -msgid "An elegant, distraction-free markdown editor" -msgstr "Elegant markdownredigering uden distraktioner" +msgid "Edit Markdown in style" +msgstr "Stil for redigering af markdown" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:8 msgid "Focus on your writing with a clean, distraction-free markdown editor." -msgstr "Fokusér på dit skrivearbejde med en ryddelig markdownredigering uden distraktioner." +msgstr "" +"Fokusér på dit skrivearbejde med en ryddelig markdownredigering uden " +"distraktioner." #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:9 msgid "Features:" @@ -135,7 +162,9 @@ msgstr "Mørkt, lyst og sepiatema" msgid "" "Everything you expect from a text editor, such as spellchecking or document " "statistics" -msgstr "Alt hvad du forventer fra en tekstredigering sâsom stavekontrol og dokumentstatistik" +msgstr "" +"Alt hvad du forventer fra en tekstredigering sâsom stavekontrol og " +"dokumentstatistik" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:15 msgid "Live preview of what you write" @@ -145,15 +174,17 @@ msgstr "Dynamisk forhåndsvisning af det du skriver" msgid "" "Export to all kind of formats: PDF, Word/Libreoffice, LaTeX, or even HTML " "slideshows" -msgstr "Eksportér til alle mulige formater: PDF, Word/Libreoffice, LaTeX eller endda HTML-præsentationer" +msgstr "" +"Eksportér til alle mulige formater: PDF, Word/Libreoffice, LaTeX eller endda " +"HTML-præsentationer" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:41 -msgid "Wolf V., Manuel G." -msgstr "Wolf V., Manuel G." +msgid "Manuel G., Wolf V." +msgstr "Manuel G., Wolf V." #: data/ui/About.ui.in:12 -msgid "Copyright (C) 2020, Wolf Vollprecht" -msgstr "Ophavsret © 2020 Wolf Vollprecht" +msgid "Copyright (C) 2022, Manuel G., Wolf V." +msgstr "Ophavsret © 2022, Manuel G., Wolf V." #: data/ui/About.ui.in:14 msgid "Apostrophe website" @@ -183,181 +214,225 @@ msgid "Help to translate:" msgstr "Hjælp med at oversætte:" #: data/ui/About.ui.in:114 -msgid "Poeditor" -msgstr "Po-redigering" +msgid "Damned Lies" +msgstr "Damned Lies" -#: data/ui/ExportPopover.ui:19 -msgid "Save As…" -msgstr "Gem som …" - -#: data/ui/ExportPopover.ui:100 -msgid "Advanced Export…" -msgstr "Avanceret eksport …" - -#: data/ui/ExportPopover.ui:125 -msgid "Copy HTML" -msgstr "Kopiér HTML" - -#: data/ui/Export.ui:47 apostrophe/export_dialog.py:133 +#: data/ui/Export.ui:46 apostrophe/export_dialog.py:133 #: apostrophe/export_dialog.py:324 apostrophe/export_dialog.py:329 -#: apostrophe/main_window.py:344 apostrophe/main_window.py:435 +#: apostrophe/main_window.py:330 apostrophe/main_window.py:423 #: apostrophe/main_window.py:508 msgid "Cancel" msgstr "Annullér" -#: data/ui/Export.ui:62 apostrophe/export_dialog.py:128 +#: data/ui/Export.ui:61 apostrophe/export_dialog.py:128 #: apostrophe/export_dialog.py:323 apostrophe/export_dialog.py:327 msgid "Export" msgstr "Eksportér" -#: data/ui/Export.ui:154 +#: data/ui/Export.ui:153 msgid "Standalone" msgstr "Selvstændig" -#: data/ui/Export.ui:156 +#: data/ui/Export.ui:155 msgid "" "Use a header and footer to include things like stylesheets and meta " "information" -msgstr "Brug sidehoved og -fod til at inkludere f.eks. stilark og metainformation" +msgstr "" +"Brug sidehoved og -fod til at inkludere f.eks. stilark og metainformation" -#: data/ui/Export.ui:171 +#: data/ui/Export.ui:170 msgid "Table of Contents" msgstr "Indholdsfortegnelse" -#: data/ui/Export.ui:187 +#: data/ui/Export.ui:186 msgid "Number Sections" msgstr "Nummerér afsnit" -#: data/ui/Export.ui:211 data/ui/Export.ui:217 +#: data/ui/Export.ui:210 data/ui/Export.ui:216 msgid "Page Size" msgstr "Sidestørrelse" -#: data/ui/Export.ui:236 +#: data/ui/Export.ui:235 msgid "HTML Options" msgstr "HTML-indstillinger" -#: data/ui/Export.ui:242 +#: data/ui/Export.ui:241 msgid "Self-contained" msgstr "Selvstændig" -#: data/ui/Export.ui:244 +#: data/ui/Export.ui:243 msgid "Produces an HTML file with no external dependencies" msgstr "Danner en HTML-fil uden eksterne afhængigheder" -#: data/ui/Export.ui:260 +#: data/ui/Export.ui:259 msgid "CSS File" msgstr "CSS-fil" -#: data/ui/Export.ui:265 +#: data/ui/Export.ui:264 msgid "Select CSS file" msgstr "Vælg CSS-fil" -#: data/ui/Export.ui:286 +#: data/ui/Export.ui:285 msgid "Syntax Highlighting" msgstr "Syntaksfremhævning" -#: data/ui/Export.ui:301 +#: data/ui/Export.ui:300 msgid "Highlight style" msgstr "Stil for syntaksfremhævning" -#: data/ui/Export.ui:322 +#: data/ui/Export.ui:321 msgid "Presentation" msgstr "Præsentation" # Næste streng virker som forklaring -#: data/ui/Export.ui:328 +#: data/ui/Export.ui:327 msgid "Incremental bullets" msgstr "Et punkt ad gangen" -#: data/ui/Export.ui:330 +#: data/ui/Export.ui:329 msgid "Show one bullet point after another in a slideshow" msgstr "Vis punkter et ad gangen i præsentation" -# Det er ikke godt at vide hvad dette betyder. Måske er det en fejl, at kan oversættes. -#: data/ui/Export.ui:357 -msgid "page0" -msgstr "page0" - -#: data/ui/Export.ui:365 -msgid "page1" -msgstr "page1" - -#: data/ui/Headerbar.ui:130 -msgid "Sync Views" -msgstr "Synkronisér visninger" - -#: data/ui/Headerbar.ui:171 +#: data/ui/Headerbar.ui:57 msgid "New" msgstr "Ny" -#: data/ui/Headerbar.ui:182 apostrophe/main_window.py:434 +#: data/ui/Headerbar.ui:67 apostrophe/main_window.py:422 msgid "Open" msgstr "Åbn" -#: data/ui/Headerbar.ui:199 -msgid "Open Recent" -msgstr "Åbn seneste" - -#: data/ui/Headerbar.ui:225 apostrophe/main_window.py:343 +#: data/ui/Headerbar.ui:90 apostrophe/main_window.py:329 msgid "Save" msgstr "Gem" -#: data/ui/Headerbar.ui:242 +#: data/ui/Headerbar.ui:102 msgid "Save as…" msgstr "Gem som …" -#: data/ui/Headerbar.ui:283 +#: data/ui/Headerbar.ui:140 msgid "Menu" msgstr "Menu" -#: data/ui/Headerbar.ui:305 apostrophe/preview_renderer.py:47 -msgid "Preview" -msgstr "Forhåndsvisning" - -#: data/ui/Headerbar.ui:378 +#: data/ui/Headerbar.ui:166 msgid "Find" msgstr "Find" -#: data/ui/Menu.ui:43 -msgid "Hemingway Mode" -msgstr "Hemingway-tilstand" +#: data/ui/Headerbar.ui:225 +msgid "New Window" +msgstr "Nyt vindue" -#: data/ui/Menu.ui:57 +#: data/ui/Headerbar.ui:264 msgid "Focus Mode" msgstr "Fokustilstand" -#: data/ui/Menu.ui:82 +#: data/ui/Headerbar.ui:289 msgid "Find and Replace" msgstr "Søg og erstat" -#: data/ui/Menu.ui:107 data/ui/Preferences.ui:19 +#: data/ui/Headerbar.ui:314 msgid "Preferences" msgstr "Indstillinger" -#: data/ui/Menu.ui:132 +#: data/ui/Headerbar.ui:339 msgid "Open Tutorial" msgstr "Åbn vejledning" -#: data/ui/Menu.ui:146 +#: data/ui/Headerbar.ui:353 msgid "Keyboard Shortcuts" msgstr "Tastaturgenveje" -#: data/ui/Menu.ui:160 +#: data/ui/Headerbar.ui:367 msgid "About Apostrophe" msgstr "Om Apostrophe" -#: data/ui/Preferences.ui:110 -msgid "Autohide header and statusbars while typing" -msgstr "Skjul automatisk titel- og statuslinje mens du skriver" +#: data/ui/Headerbar.ui:395 +msgid "Save As…" +msgstr "Gem som …" -#: data/ui/Preferences.ui:112 +#: data/ui/Headerbar.ui:476 +msgid "Advanced Export…" +msgstr "Avanceret eksport …" + +#: data/ui/Headerbar.ui:501 +msgid "Copy HTML" +msgstr "Kopiér HTML" + +#: data/ui/Preferences.ui:40 msgid "Autohide headerbar" msgstr "Skjul automatisk titellinje" -#: data/ui/PreviewLayoutSwitcherItem.ui:36 apostrophe/headerbars.py:126 -#: apostrophe/preview_renderer.py:132 -msgid "Full-Width" -msgstr "Fuld bredde" +#: data/ui/Preferences.ui:41 +msgid "Autohide header and statusbars while typing" +msgstr "Skjul automatisk titel- og statuslinje mens du skriver" + +#: data/ui/Preferences.ui:57 +msgid "Use bigger text" +msgstr "Brug større tekst" + +#: data/ui/Preferences.ui:58 +msgid "Reduce the margins width and increase the text size when possible" +msgstr "Reducér margenbredden og forøg tekststørrelsen hvis muligt" + +#: data/ui/Preferences.ui:72 +msgid "Restore session" +msgstr "Gendan session" + +#: data/ui/Preferences.ui:73 +msgid "Return to your previous session when Apostrophe is started" +msgstr "Gendan din forrige session ved programstart" + +#: data/ui/Preferences.ui:91 +msgid "Flavor of markdown Apostrophe will use" +msgstr "Hvilket markdownformat Apostrophe skal bruge" + +#: data/ui/Preferences.ui:100 +msgid "Markdown flavor documentation" +msgstr "Dokumentation for markdownformat" + +#: data/ui/PreviewLayoutSwitcher.ui:10 apostrophe/preview_renderer.py:210 +msgid "Preview" +msgstr "Forhåndsvisning" + +#: data/ui/PreviewLayoutSwitcher.ui:32 +msgid "Screen Layout" +msgstr "Skærmlayout" + +#: data/ui/Recents.ui:60 +msgid "No Recent Documents" +msgstr "Ingen senest brugte dokumenter" + +#: data/ui/Recents.ui:88 +msgid "No Results Found" +msgstr "Ingen resultater fundet" + +#: data/ui/SearchBar.ui:50 +msgid "Previous Match" +msgstr "Forrige resultat" + +#: data/ui/SearchBar.ui:63 +msgid "Next Match" +msgstr "Næste resultat" + +#. Translators: This indicates case sensitivity, so it should be the first vowel of the language in lowercase and uppercase +#: data/ui/SearchBar.ui:85 +msgid "aA" +msgstr "aA" + +#: data/ui/SearchBar.ui:89 +msgid "Case Sensitive" +msgstr "Forskel på store/små bogstaver" + +#: data/ui/SearchBar.ui:99 +msgid "Regular Expression" +msgstr "Regulært udtryk" + +#: data/ui/SearchBar.ui:111 data/ui/SearchBar.ui:165 +msgid "Replace" +msgstr "Erstat" + +#: data/ui/SearchBar.ui:175 +msgid "Replace All" +msgstr "Erstat alle" #: data/ui/Shortcuts.ui:13 msgctxt "shortcut window" @@ -504,41 +579,25 @@ msgctxt "shortcut window" msgid "Select all text" msgstr "Markér hele teksten" -#: data/ui/Window.ui:107 -msgid "Show Statistics" -msgstr "Vis statistik" - -#: data/ui/Window.ui:206 -msgid "Previous Match" -msgstr "Forrige resultat" - -#: data/ui/Window.ui:220 -msgid "Next Match" -msgstr "Næste resultat" - -#: data/ui/Window.ui:249 -msgid "aA" -msgstr "aA" - -#: data/ui/Window.ui:253 -msgid "Case Sensitive" -msgstr "Forskel på store/små bogstaver" +#: data/ui/ThemeSwitcher.ui:22 +msgid "Use System Colors" +msgstr "Brug systemfarver" -#: data/ui/Window.ui:263 -msgid "(.*)" -msgstr "(.*)" +#: data/ui/ThemeSwitcher.ui:51 +msgid "Use Light Colors" +msgstr "Brug lyse farver" -#: data/ui/Window.ui:267 -msgid "Regular Expression" -msgstr "Regulært udtryk" +#: data/ui/ThemeSwitcher.ui:80 +msgid "Use Sepia Colors" +msgstr "Brug sepiafarver" -#: data/ui/Window.ui:280 data/ui/Window.ui:358 -msgid "Replace" -msgstr "Erstat" +#: data/ui/ThemeSwitcher.ui:109 +msgid "Use Dark Colors" +msgstr "Brug mørke farver" -#: data/ui/Window.ui:372 -msgid "Replace All" -msgstr "Erstat alle" +#: data/ui/Window.ui:71 +msgid "Show Statistics" +msgstr "Vis statistik" #: apostrophe/export_dialog.py:131 apostrophe/export_dialog.py:328 #, python-format @@ -564,65 +623,52 @@ msgstr "Eksportér til {}" msgid "Select folder" msgstr "Vælg mappe" -#: apostrophe/headerbars.py:128 apostrophe/preview_renderer.py:134 -msgid "Half-Width" -msgstr "Half bredde" - -#: apostrophe/headerbars.py:130 apostrophe/preview_renderer.py:136 -msgid "Half-Height" -msgstr "Halv højde" - -# Det drejer sig om en forhåndsvisningstilstand ifølge kildekoden. -#: apostrophe/headerbars.py:132 apostrophe/preview_renderer.py:138 -msgid "Windowed" -msgstr "Nyt vindue" - -#: apostrophe/helpers.py:90 +#: apostrophe/helpers.py:89 msgid "Error" msgstr "Fejl" -#: apostrophe/inhibitor.py:35 +#: apostrophe/inhibitor.py:36 msgid "Unsaved documents" msgstr "Dokumenter som ikke er gemt" -#: apostrophe/inline_preview.py:201 +#: apostrophe/inline_preview.py:200 msgid "Formula looks incorrect:" msgstr "Formlen ser forkert ud:" -#: apostrophe/inline_preview.py:240 +#: apostrophe/inline_preview.py:239 msgid "No matching footnote found" msgstr "Ingen fodnote matcher" -#: apostrophe/inline_preview.py:260 +#: apostrophe/inline_preview.py:259 msgid "noun" msgstr "navneord" -#: apostrophe/inline_preview.py:262 +#: apostrophe/inline_preview.py:261 msgid "verb" msgstr "udsagnsord" -#: apostrophe/inline_preview.py:264 +#: apostrophe/inline_preview.py:263 msgid "adjective" msgstr "tillægsord" # egentlig kan jeg bedst lide adverbium/verbum/... men mon ikke "dansk" er bedre? -#: apostrophe/inline_preview.py:266 +#: apostrophe/inline_preview.py:265 msgid "adverb" msgstr "biord" -#: apostrophe/main_window.py:340 +#: apostrophe/main_window.py:326 msgid "Save your File" msgstr "Gem din fil" -#: apostrophe/main_window.py:424 +#: apostrophe/main_window.py:412 msgid "Markdown Files" msgstr "Markdownfiler" -#: apostrophe/main_window.py:428 +#: apostrophe/main_window.py:416 msgid "Plain Text Files" msgstr "Rene tekstfiler" -#: apostrophe/main_window.py:431 +#: apostrophe/main_window.py:419 msgid "Open a .md file" msgstr "Åbn en .md-fil" @@ -643,27 +689,52 @@ msgstr "Luk uden at gemme" msgid "Save now" msgstr "Gem nu" -#: apostrophe/main_window.py:711 +#: apostrophe/main_window.py:686 msgid "New File" msgstr "Ny fil" -#: apostrophe/stats_handler.py:74 -msgid "{:n} Characters" -msgstr "{:n} tegn" +#: apostrophe/preview_layout_switcher.py:38 +msgid "Full-Width" +msgstr "Fuld bredde" -#: apostrophe/stats_handler.py:76 -msgid "{:n} Words" -msgstr "{:n} ord" +#: apostrophe/preview_layout_switcher.py:40 +msgid "Half-Width" +msgstr "Half bredde" -#: apostrophe/stats_handler.py:78 -msgid "{:n} Sentences" -msgstr "{:n} sætninger" +#: apostrophe/preview_layout_switcher.py:42 +msgid "Half-Height" +msgstr "Halv højde" -#: apostrophe/stats_handler.py:80 -msgid "{:n} Paragraphs" -msgstr "{:n} afsnit" +# Det drejer sig om en forhåndsvisningstilstand ifølge kildekoden. +#: apostrophe/preview_layout_switcher.py:44 +msgid "Windowed" +msgstr "Nyt vindue" -#: apostrophe/stats_handler.py:82 +#: apostrophe/stats_handler.py:75 +msgid "{:n} Character" +msgid_plural "{:n} Characters" +msgstr[0] "{:n} tegn" +msgstr[1] "{:n} tegn" + +#: apostrophe/stats_handler.py:77 +msgid "{:n} Word" +msgid_plural "{:n} Words" +msgstr[0] "{:n} ord" +msgstr[1] "{:n} ord" + +#: apostrophe/stats_handler.py:79 +msgid "{:n} Sentence" +msgid_plural "{:n} Sentences" +msgstr[0] "{:n} sætning" +msgstr[1] "{:n} sætninger" + +#: apostrophe/stats_handler.py:81 +msgid "{:n} Paragraph" +msgid_plural "{:n} Paragraphs" +msgstr[0] "{:n} afsnit" +msgstr[1] "{:n} afsnit" + +#: apostrophe/stats_handler.py:83 msgid "{:d}:{:02d}:{:02d} Read Time" msgstr "{:d}:{:02d}:{:02d} læsetid" @@ -704,3 +775,28 @@ msgstr "Element" #: apostrophe/text_view_format_inserter.py:98 msgid "Header" msgstr "Overskrift" + +#~ msgid "An elegant, distraction-free markdown editor" +#~ msgstr "Elegant markdownredigering uden distraktioner" + +#~ msgid "Wolf V., Manuel G." +#~ msgstr "Wolf V., Manuel G." + +#~ msgid "Poeditor" +#~ msgstr "Po-redigering" + +# Det er ikke godt at vide hvad dette betyder. Måske er det en fejl, at kan oversættes. +#~ msgid "page0" +#~ msgstr "page0" + +#~ msgid "page1" +#~ msgstr "page1" + +#~ msgid "Sync Views" +#~ msgstr "Synkronisér visninger" + +#~ msgid "Open Recent" +#~ msgstr "Åbn seneste" + +#~ msgid "(.*)" +#~ msgstr "(.*)" -- 2.40.1 From d39f661e62a933906b742a321712e55bb8da6ef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=80=D0=BE=D1=81=D0=BB=D0=B0=D0=B2=20=D0=9D?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=BB=D0=B8=D1=9B?= Date: Sat, 6 Aug 2022 14:38:27 +0000 Subject: [PATCH 012/134] Update Serbian translation --- po/sr.po | 473 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 292 insertions(+), 181 deletions(-) diff --git a/po/sr.po b/po/sr.po index 8610313..64eaf48 100644 --- a/po/sr.po +++ b/po/sr.po @@ -1,116 +1,146 @@ # Serbian translation for apostrophe. # Copyright (C) 2021 apostrophe's COPYRIGHT HOLDER # This file is distributed under the same license as the apostrophe package. -# Мирослав Николић , 2021. +# Мирослав Николић , 2021–2022. +# msgid "" msgstr "" "Project-Id-Version: apostrophe main\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/apostrophe/issues\n" -"POT-Creation-Date: 2021-09-29 14:40+0000\n" -"PO-Revision-Date: 2021-10-07 20:22+0200\n" -"Last-Translator: Мирослав Николић \n" -"Language-Team: српски \n" +"POT-Creation-Date: 2022-07-09 09:46+0000\n" +"PO-Revision-Date: 2022-08-06 16:37+0200\n" +"Last-Translator: Мирослав Николић \n" +"Language-Team: Serbian <српски >\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Virtaal 0.7.1\n" +"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n" +"X-Generator: Gtranslator 3.36.0\n" #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:3 #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:5 msgid "Apostrophe" msgstr "Апостроф" -#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! +#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! Do NOT translate "uberwriter" or "apostrophe"! The list MUST also end with a semicolon! #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:5 -msgid "uberwriter;UberWriter;apostrophe;markdown;editor;" +#| msgid "uberwriter;UberWriter;apostrophe;markdown;editor;" +msgid "uberwriter;UberWriter;apostrophe;markdown;editor;text;write;" msgstr "" -"подписац;апостроф;уређивач;uberwriter;UberWriter;apostrophe;markdown;editor;" +"подписац;апостроф;уређивач;текст;писање;uberwriter;UberWriter;apostrophe;" +"markdown;editor;text;write;" #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:6 msgid "Apostrophe, an elegant, distraction-free markdown editor" msgstr "Апостроф, елегантан, уређивач обележавања који не одвлачи пажњу" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:28 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 msgid "Color scheme" msgstr "Шема боја" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:30 msgid "Use the color scheme in the application's UI and in the text area." msgstr "Користи шему боја у корисничком сучељу програма у области текста." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:35 -#: data/ui/Preferences.ui:49 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 +#: data/ui/Preferences.ui:23 data/ui/Preferences.ui:24 msgid "Check spelling while typing" msgstr "Провера писања приликом куцања" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:37 msgid "Enable or disable spellchecking." msgstr "Укључује или искључује проверу писања." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:42 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:43 msgid "Synchronize editor/preview scrolling" msgstr "Усклађује премицање уређивача/претпрегледа" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:43 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:44 msgid "Keep the editor and preview scroll positions in sync." msgstr "Задржава положаје премицања уређивача и претпрегледа у усклађивању." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:49 -#: data/ui/Preferences.ui:73 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 +#: data/ui/Preferences.ui:90 msgid "Input format" msgstr "Формат улаза" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:51 msgid "Input format to use when previewing and exporting using Pandoc." msgstr "" "Улазни формат за коришћење приликом претпрегледа и извоза коришћењем Пандока." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:56 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 msgid "Autohide Headerbar" msgstr "Самоскривање траке заглавља" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:58 msgid "Hide the header and status bars when typing." msgstr "Скрива траке заглавља и стања приликом куцања." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:63 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:64 msgid "Open file base path" msgstr "Отвара основну путању датотеке" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:64 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:65 msgid "Open file paths of the current session" msgstr "Отвара путање датотека текуће сесије" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:70 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 msgid "Default statistic" msgstr "Основна статистика" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:72 msgid "Which statistic is shown on the main window." msgstr "Која статистика се приказује у главном прозору." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:77 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:78 msgid "Characters per line" msgstr "Знакова по реду" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:78 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:79 msgid "Maximum number of characters per line within the editor." msgstr "Највећи број знакова у реду у уређивачу." -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:84 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 +#: data/ui/Headerbar.ui:250 +msgid "Hemingway Mode" +msgstr "Режим Хемингвеја" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:86 +msgid "Whether the user can delete text or not." +msgstr "Да ли корисник може да обрише текст или не." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:92 msgid "Preview mode" msgstr "Режим претпрегледа" -#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:93 msgid "How to display the preview." msgstr "Како ће се приказивати претпреглед." +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:99 +#| msgid "Preview mode" +msgid "Preview active" +msgstr "Претпреглед је активан" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:100 +msgid "Whether showing of preview is active when launching a new window." +msgstr "Да ли је приказ претпрегледа активан приликом покретања новог прозора." + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:106 +msgid "Text size" +msgstr "Величина текста" + +#: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:107 +msgid "Preferred relative size for the text." +msgstr "Жељена релативна величина за текст." + #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:6 -msgid "An elegant, distraction-free markdown editor" -msgstr "Елегантан, уређивач обележавања који не одвлачи пажњу" +#| msgid "Markdown Files" +msgid "Edit Markdown in style" +msgstr "Уреди обележавање са стилом" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:8 msgid "Focus on your writing with a clean, distraction-free markdown editor." @@ -155,12 +185,13 @@ msgstr "" "покретне приказе" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:41 -msgid "Wolf V., Manuel G." -msgstr "Волф В., Мануел Г." +msgid "Manuel G., Wolf V." +msgstr "Мануел Г., Волф В." #: data/ui/About.ui.in:12 -msgid "Copyright (C) 2020, Wolf Vollprecht" -msgstr "Ауторска права © 2020, Волф Волпрехт" +#| msgid "Copyright (C) 2020, Wolf Vollprecht" +msgid "Copyright (C) 2022, Manuel G., Wolf V." +msgstr "Ауторска права © 2022, Мануел Г., Волф В." #: data/ui/About.ui.in:14 msgid "Apostrophe website" @@ -187,38 +218,26 @@ msgid "Help to translate:" msgstr "Помозите у превођењу:" #: data/ui/About.ui.in:114 -msgid "Poeditor" -msgstr "Поуређивач" - -#: data/ui/ExportPopover.ui:19 -msgid "Save As…" -msgstr "Сачувај као…" - -#: data/ui/ExportPopover.ui:100 -msgid "Advanced Export…" -msgstr "Напредни извоз…" - -#: data/ui/ExportPopover.ui:125 -msgid "Copy HTML" -msgstr "Умножи ХТМЛ" +msgid "Damned Lies" +msgstr "Проклете лажи" -#: data/ui/Export.ui:47 apostrophe/export_dialog.py:133 +#: data/ui/Export.ui:46 apostrophe/export_dialog.py:133 #: apostrophe/export_dialog.py:324 apostrophe/export_dialog.py:329 -#: apostrophe/main_window.py:344 apostrophe/main_window.py:435 +#: apostrophe/main_window.py:330 apostrophe/main_window.py:423 #: apostrophe/main_window.py:508 msgid "Cancel" msgstr "Откажи" -#: data/ui/Export.ui:62 apostrophe/export_dialog.py:128 +#: data/ui/Export.ui:61 apostrophe/export_dialog.py:128 #: apostrophe/export_dialog.py:323 apostrophe/export_dialog.py:327 msgid "Export" msgstr "Извези" -#: data/ui/Export.ui:154 +#: data/ui/Export.ui:153 msgid "Standalone" msgstr "Самостојећи" -#: data/ui/Export.ui:156 +#: data/ui/Export.ui:155 msgid "" "Use a header and footer to include things like stylesheets and meta " "information" @@ -226,142 +245,202 @@ msgstr "" "Користите заглавље и подножје да укључите ствари као што су стилски листови " "и мета информације" -#: data/ui/Export.ui:171 +#: data/ui/Export.ui:170 msgid "Table of Contents" msgstr "Табела садржаја" -#: data/ui/Export.ui:187 +#: data/ui/Export.ui:186 msgid "Number Sections" msgstr "Број одељака" -#: data/ui/Export.ui:211 data/ui/Export.ui:217 +#: data/ui/Export.ui:210 data/ui/Export.ui:216 msgid "Page Size" msgstr "Величина странице" -#: data/ui/Export.ui:236 +#: data/ui/Export.ui:235 msgid "HTML Options" msgstr "ХТМЛ опције" -#: data/ui/Export.ui:242 +#: data/ui/Export.ui:241 msgid "Self-contained" msgstr "Самосадржећи" -#: data/ui/Export.ui:244 +#: data/ui/Export.ui:243 msgid "Produces an HTML file with no external dependencies" msgstr "Произведите ХТМЛ датотеку без спољних зависности" -#: data/ui/Export.ui:260 +#: data/ui/Export.ui:259 msgid "CSS File" msgstr "ЦСС датотека" -#: data/ui/Export.ui:265 +#: data/ui/Export.ui:264 msgid "Select CSS file" msgstr "Изаберите ЦСС датотеку" -#: data/ui/Export.ui:286 +#: data/ui/Export.ui:285 msgid "Syntax Highlighting" msgstr "Истицање синтаксе" -#: data/ui/Export.ui:301 +#: data/ui/Export.ui:300 msgid "Highlight style" msgstr "Стил истицања" -#: data/ui/Export.ui:322 +#: data/ui/Export.ui:321 msgid "Presentation" msgstr "Представљање" -#: data/ui/Export.ui:328 +#: data/ui/Export.ui:327 msgid "Incremental bullets" msgstr "Повећавајући меци" -#: data/ui/Export.ui:330 +#: data/ui/Export.ui:329 msgid "Show one bullet point after another in a slideshow" msgstr "Прикажи тачку метка једну након друге у покретном приказу" -#: data/ui/Export.ui:357 -msgid "page0" -msgstr "стр.0" - -#: data/ui/Export.ui:365 -msgid "page1" -msgstr "стр.1" - -#: data/ui/Headerbar.ui:130 -msgid "Sync Views" -msgstr "Прегледи усклађивања" - -#: data/ui/Headerbar.ui:171 +#: data/ui/Headerbar.ui:57 msgid "New" msgstr "Ново" -#: data/ui/Headerbar.ui:182 apostrophe/main_window.py:434 +#: data/ui/Headerbar.ui:67 apostrophe/main_window.py:422 msgid "Open" msgstr "Отвори" -#: data/ui/Headerbar.ui:199 -msgid "Open Recent" -msgstr "Отвори скорашње" - -#: data/ui/Headerbar.ui:225 apostrophe/main_window.py:343 +#: data/ui/Headerbar.ui:90 apostrophe/main_window.py:329 msgid "Save" msgstr "Сачувај" -#: data/ui/Headerbar.ui:242 +#: data/ui/Headerbar.ui:102 msgid "Save as…" msgstr "Сачувај као…" -#: data/ui/Headerbar.ui:283 +#: data/ui/Headerbar.ui:140 msgid "Menu" msgstr "Изборник" -#: data/ui/Headerbar.ui:305 apostrophe/preview_renderer.py:47 -msgid "Preview" -msgstr "Претпреглед" - -#: data/ui/Headerbar.ui:378 +#: data/ui/Headerbar.ui:166 msgid "Find" msgstr "Нађи" -#: data/ui/Menu.ui:43 -msgid "Hemingway Mode" -msgstr "Режим Хемингвеја" +#: data/ui/Headerbar.ui:225 +#| msgid "Windowed" +msgid "New Window" +msgstr "Нови прозор" -#: data/ui/Menu.ui:57 +#: data/ui/Headerbar.ui:264 msgid "Focus Mode" msgstr "Режим фокуса" -#: data/ui/Menu.ui:82 +#: data/ui/Headerbar.ui:289 msgid "Find and Replace" msgstr "Нађи и замени" -#: data/ui/Menu.ui:107 data/ui/Preferences.ui:19 +#: data/ui/Headerbar.ui:314 msgid "Preferences" msgstr "Поставке" -#: data/ui/Menu.ui:132 +#: data/ui/Headerbar.ui:339 msgid "Open Tutorial" msgstr "Отвори упутство" -#: data/ui/Menu.ui:146 +#: data/ui/Headerbar.ui:353 msgid "Keyboard Shortcuts" msgstr "Пречице тастатуре" -#: data/ui/Menu.ui:160 +#: data/ui/Headerbar.ui:367 msgid "About Apostrophe" msgstr "О Апострофу" -#: data/ui/Preferences.ui:110 -msgid "Autohide header and statusbars while typing" -msgstr "Сам сакриј траке заглавља и стања приликом куцања" +#: data/ui/Headerbar.ui:395 +msgid "Save As…" +msgstr "Сачувај као…" -#: data/ui/Preferences.ui:112 +#: data/ui/Headerbar.ui:476 +msgid "Advanced Export…" +msgstr "Напредни извоз…" + +#: data/ui/Headerbar.ui:501 +msgid "Copy HTML" +msgstr "Умножи ХТМЛ" + +#: data/ui/Preferences.ui:40 msgid "Autohide headerbar" msgstr "Сам сакриј траку заглавља" -#: data/ui/PreviewLayoutSwitcherItem.ui:36 apostrophe/headerbars.py:126 -#: apostrophe/preview_renderer.py:132 -msgid "Full-Width" -msgstr "Пуна ширина" +#: data/ui/Preferences.ui:41 +msgid "Autohide header and statusbars while typing" +msgstr "Сам сакриј траке заглавља и стања приликом куцања" + +#: data/ui/Preferences.ui:57 +msgid "Use bigger text" +msgstr "Користи већи текст" + +#: data/ui/Preferences.ui:58 +msgid "Reduce the margins width and increase the text size when possible" +msgstr "Умањите ширину маргина и повећајте величину текста када је могуће" + +#: data/ui/Preferences.ui:72 +#| msgid "Regular Expression" +msgid "Restore session" +msgstr "Врати сесију" + +#: data/ui/Preferences.ui:73 +msgid "Return to your previous session when Apostrophe is started" +msgstr "Вратите се на вашу претходну сесију када се покрене Апостроф" + +#: data/ui/Preferences.ui:91 +msgid "Flavor of markdown Apostrophe will use" +msgstr "Врста обележавања коју ће користити Апостроф" + +#: data/ui/Preferences.ui:100 +msgid "Markdown flavor documentation" +msgstr "Документација врсте обележавања" + +#: data/ui/PreviewLayoutSwitcher.ui:10 apostrophe/preview_renderer.py:210 +msgid "Preview" +msgstr "Претпреглед" + +#: data/ui/PreviewLayoutSwitcher.ui:32 +msgid "Screen Layout" +msgstr "Рапоред екрана" + +#: data/ui/Recents.ui:60 +#| msgctxt "shortcut window" +#| msgid "Close document" +msgid "No Recent Documents" +msgstr "Нема скорашњих докумената" + +#: data/ui/Recents.ui:88 +msgid "No Results Found" +msgstr "Нисам нашао резултате" + +#: data/ui/SearchBar.ui:50 +msgid "Previous Match" +msgstr "Претходно поклапање" + +#: data/ui/SearchBar.ui:63 +msgid "Next Match" +msgstr "Следеће поклапање" + +#. Translators: This indicates case sensitivity, so it should be the first vowel of the language in lowercase and uppercase +#: data/ui/SearchBar.ui:85 +msgid "aA" +msgstr "аА" + +#: data/ui/SearchBar.ui:89 +msgid "Case Sensitive" +msgstr "Разликује величину слова" + +#: data/ui/SearchBar.ui:99 +msgid "Regular Expression" +msgstr "Регуларни израз" + +#: data/ui/SearchBar.ui:111 data/ui/SearchBar.ui:165 +msgid "Replace" +msgstr "Замени" + +#: data/ui/SearchBar.ui:175 +msgid "Replace All" +msgstr "Замени све" #: data/ui/Shortcuts.ui:13 msgctxt "shortcut window" @@ -508,41 +587,25 @@ msgctxt "shortcut window" msgid "Select all text" msgstr "Изабери сав текст" -#: data/ui/Window.ui:107 -msgid "Show Statistics" -msgstr "Прикажи статистику" - -#: data/ui/Window.ui:206 -msgid "Previous Match" -msgstr "Претходно поклапање" - -#: data/ui/Window.ui:220 -msgid "Next Match" -msgstr "Следеће поклапање" - -#: data/ui/Window.ui:249 -msgid "aA" -msgstr "аА" - -#: data/ui/Window.ui:253 -msgid "Case Sensitive" -msgstr "Разликује величину слова" +#: data/ui/ThemeSwitcher.ui:22 +msgid "Use System Colors" +msgstr "Користи боје система" -#: data/ui/Window.ui:263 -msgid "(.*)" -msgstr "(.*)" +#: data/ui/ThemeSwitcher.ui:51 +msgid "Use Light Colors" +msgstr "Користи светле боје" -#: data/ui/Window.ui:267 -msgid "Regular Expression" -msgstr "Регуларни израз" +#: data/ui/ThemeSwitcher.ui:80 +msgid "Use Sepia Colors" +msgstr "Користи сиве боје" -#: data/ui/Window.ui:280 data/ui/Window.ui:358 -msgid "Replace" -msgstr "Замени" +#: data/ui/ThemeSwitcher.ui:109 +msgid "Use Dark Colors" +msgstr "Користи тамне боје" -#: data/ui/Window.ui:372 -msgid "Replace All" -msgstr "Замени све" +#: data/ui/Window.ui:71 +msgid "Show Statistics" +msgstr "Прикажи статистику" #: apostrophe/export_dialog.py:131 apostrophe/export_dialog.py:328 #, python-format @@ -568,63 +631,51 @@ msgstr "Извези у „{}“" msgid "Select folder" msgstr "Изабери фасциклу" -#: apostrophe/headerbars.py:128 apostrophe/preview_renderer.py:134 -msgid "Half-Width" -msgstr "Пола ширине" - -#: apostrophe/headerbars.py:130 apostrophe/preview_renderer.py:136 -msgid "Half-Height" -msgstr "Пола висине" - -#: apostrophe/headerbars.py:132 apostrophe/preview_renderer.py:138 -msgid "Windowed" -msgstr "Упрозорено" - -#: apostrophe/helpers.py:90 +#: apostrophe/helpers.py:89 msgid "Error" msgstr "Грешка" -#: apostrophe/inhibitor.py:35 +#: apostrophe/inhibitor.py:36 msgid "Unsaved documents" msgstr "Несачувана документа" -#: apostrophe/inline_preview.py:201 +#: apostrophe/inline_preview.py:200 msgid "Formula looks incorrect:" msgstr "Формула изгледа нетачно:" -#: apostrophe/inline_preview.py:240 +#: apostrophe/inline_preview.py:239 msgid "No matching footnote found" msgstr "Нисам нашао поклапајуће подножје" -#: apostrophe/inline_preview.py:260 +#: apostrophe/inline_preview.py:259 msgid "noun" msgstr "именица" -#: apostrophe/inline_preview.py:262 +#: apostrophe/inline_preview.py:261 msgid "verb" msgstr "глагол" -#: apostrophe/inline_preview.py:264 +#: apostrophe/inline_preview.py:263 msgid "adjective" msgstr "прилог" -#: apostrophe/inline_preview.py:266 +#: apostrophe/inline_preview.py:265 msgid "adverb" msgstr "придев" -#: apostrophe/main_window.py:340 +#: apostrophe/main_window.py:326 msgid "Save your File" msgstr "Сачувајте вашу датотеку" -#: apostrophe/main_window.py:424 +#: apostrophe/main_window.py:412 msgid "Markdown Files" msgstr "Датотеке обележавања" -#: apostrophe/main_window.py:428 +#: apostrophe/main_window.py:416 msgid "Plain Text Files" msgstr "Датотеке обичног текста" -#: apostrophe/main_window.py:431 +#: apostrophe/main_window.py:419 msgid "Open a .md file" msgstr "Отворите „.md“ датотеку" @@ -645,27 +696,63 @@ msgstr "Затвори без чувања" msgid "Save now" msgstr "Сачувај сада" -#: apostrophe/main_window.py:711 +#: apostrophe/main_window.py:686 msgid "New File" msgstr "Нова датотека" -#: apostrophe/stats_handler.py:74 -msgid "{:n} Characters" -msgstr "{:n} знака" +#: apostrophe/preview_layout_switcher.py:38 +msgid "Full-Width" +msgstr "Пуна ширина" -#: apostrophe/stats_handler.py:76 -msgid "{:n} Words" -msgstr "{:n} речи" +#: apostrophe/preview_layout_switcher.py:40 +msgid "Half-Width" +msgstr "Пола ширине" -#: apostrophe/stats_handler.py:78 -msgid "{:n} Sentences" -msgstr "{:n} реченица" +#: apostrophe/preview_layout_switcher.py:42 +msgid "Half-Height" +msgstr "Пола висине" -#: apostrophe/stats_handler.py:80 -msgid "{:n} Paragraphs" -msgstr "{:n} пасуса" +#: apostrophe/preview_layout_switcher.py:44 +msgid "Windowed" +msgstr "Упрозорено" -#: apostrophe/stats_handler.py:82 +#: apostrophe/stats_handler.py:75 +#| msgid "{:n} Characters" +msgid "{:n} Character" +msgid_plural "{:n} Characters" +msgstr[0] "{:n} знак" +msgstr[1] "{:n} знака" +msgstr[2] "{:n} знака" +msgstr[3] "један знак" + +#: apostrophe/stats_handler.py:77 +#| msgid "{:n} Words" +msgid "{:n} Word" +msgid_plural "{:n} Words" +msgstr[0] "{:n} реч" +msgstr[1] "{:n} речи" +msgstr[2] "{:n} речи" +msgstr[3] "једна реч" + +#: apostrophe/stats_handler.py:79 +#| msgid "{:n} Sentences" +msgid "{:n} Sentence" +msgid_plural "{:n} Sentences" +msgstr[0] "{:n} реченица" +msgstr[1] "{:n} реченице" +msgstr[2] "{:n} реченица" +msgstr[3] "једна реченица" + +#: apostrophe/stats_handler.py:81 +#| msgid "{:n} Paragraphs" +msgid "{:n} Paragraph" +msgid_plural "{:n} Paragraphs" +msgstr[0] "{:n} пасус" +msgstr[1] "{:n} пасуса" +msgstr[2] "{:n} пасуса" +msgstr[3] "један пасус" + +#: apostrophe/stats_handler.py:83 msgid "{:d}:{:02d}:{:02d} Read Time" msgstr "{:d}:{:02d}:{:02d} време читања" @@ -693,3 +780,27 @@ msgstr "Ставка" #: apostrophe/text_view_format_inserter.py:98 msgid "Header" msgstr "Заглавље" + +#~ msgid "An elegant, distraction-free markdown editor" +#~ msgstr "Елегантан, уређивач обележавања који не одвлачи пажњу" + +#~ msgid "Wolf V., Manuel G." +#~ msgstr "Волф В., Мануел Г." + +#~ msgid "Poeditor" +#~ msgstr "Поуређивач" + +#~ msgid "page0" +#~ msgstr "стр.0" + +#~ msgid "page1" +#~ msgstr "стр.1" + +#~ msgid "Sync Views" +#~ msgstr "Прегледи усклађивања" + +#~ msgid "Open Recent" +#~ msgstr "Отвори скорашње" + +#~ msgid "(.*)" +#~ msgstr "(.*)" -- 2.40.1 From 14242b5e6e7f9c370368e1d2079fa3c8eaf43150 Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Sun, 14 Aug 2022 11:04:32 +0000 Subject: [PATCH 013/134] Update Croatian translation --- po/hr.po | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/po/hr.po b/po/hr.po index ec85827..ab5c8a1 100644 --- a/po/hr.po +++ b/po/hr.po @@ -7,17 +7,17 @@ msgid "" msgstr "" "Project-Id-Version: apostrophe main\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/apostrophe/issues\n" -"POT-Creation-Date: 2022-03-15 21:52+0000\n" -"PO-Revision-Date: 2022-03-19 23:13+0100\n" -"Last-Translator: \n" +"POT-Creation-Date: 2022-03-19 22:14+0000\n" +"PO-Revision-Date: 2022-03-30 18:57+0200\n" +"Last-Translator: Milo Ivir \n" "Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 3.0.1\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 3.0\n" #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:3 #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:5 @@ -39,8 +39,7 @@ msgstr "Shema boja" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:30 msgid "Use the color scheme in the application's UI and in the text area." -msgstr "" -"Koristi shemu boja u korisničkom sučelju aplikacije i području teksta." +msgstr "Koristi shemu boja u korisničkom sučelju aplikacije i području teksta." #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 #: data/ui/Preferences.ui:23 data/ui/Preferences.ui:24 @@ -197,7 +196,8 @@ msgstr "Apostrof web stranica" msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" -" gogo https://launchpad.net/~trebelnik-stefina" +" gogo https://launchpad.net/~trebelnik-stefina\n" +"Milo Ivir , 2022." #: data/ui/About.ui.in:65 msgid "Donations:" @@ -285,11 +285,11 @@ msgstr "Prezentacija" #: data/ui/Export.ui:327 msgid "Incremental bullets" -msgstr "" +msgstr "Pojedinačni prikaz točaka" #: data/ui/Export.ui:329 msgid "Show one bullet point after another in a slideshow" -msgstr "" +msgstr "U prezentaciji prikaži točke prezentacije jednu za drugom" #: data/ui/Headerbar.ui:57 msgid "New" -- 2.40.1 From 66a6ca8023ed458827decd4e283164b3ee8ed456 Mon Sep 17 00:00:00 2001 From: Cheng-Chia Tseng Date: Sat, 3 Sep 2022 08:20:29 +0000 Subject: [PATCH 014/134] Update Chinese (Taiwan) translation --- po/zh_TW.po | 295 ++++++++++++++++++++++++++-------------------------- 1 file changed, 150 insertions(+), 145 deletions(-) diff --git a/po/zh_TW.po b/po/zh_TW.po index 2e07a4c..0bcbe20 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -1,3 +1,6 @@ +# +# Kdwk , 2022. +# msgid "" msgstr "" "Project-Id-Version: Apostrophe\n" @@ -7,7 +10,10 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: POEditor.com\n" +"X-Generator: Gtranslator 41.0\n" +"Last-Translator: Kdwk \n" +"Language-Team: Chinese (Taiwan) <>\n" +"PO-Revision-Date: 2022-01-22 10:30+0800\n" #: apostrophe/export_dialog.py:128 apostrophe/export_dialog.py:323 #: apostrophe/export_dialog.py:327 data/ui/Export.ui:62 @@ -17,7 +23,7 @@ msgstr "匯出" #: apostrophe/export_dialog.py:131 apostrophe/export_dialog.py:328 #, python-format msgid "Export to %s" -msgstr "" +msgstr "匯出至 %s" #: apostrophe/export_dialog.py:133 apostrophe/export_dialog.py:324 #: apostrophe/export_dialog.py:329 apostrophe/main_window.py:344 @@ -33,43 +39,46 @@ msgid "" "\n" "{err_msg}" msgstr "" +"匯出文件時發生錯誤:\n" +"\n" +"{err_msg}" #: apostrophe/export_dialog.py:234 msgid "Export to {}" -msgstr "" +msgstr "匯出至 {}" #: apostrophe/export_dialog.py:324 msgid "Select folder" -msgstr "" +msgstr "選擇文件夾" #: apostrophe/headerbars.py:126 apostrophe/preview_renderer.py:132 #: data/ui/PreviewLayoutSwitcherItem.ui:36 msgid "Full-Width" -msgstr "" +msgstr "全形" #: apostrophe/headerbars.py:128 apostrophe/preview_renderer.py:134 msgid "Half-Width" -msgstr "" +msgstr "半形" #: apostrophe/headerbars.py:130 apostrophe/preview_renderer.py:136 msgid "Half-Height" -msgstr "" +msgstr "半高" #: apostrophe/headerbars.py:132 apostrophe/preview_renderer.py:138 msgid "Windowed" -msgstr "" +msgstr "視窗模式" #: apostrophe/helpers.py:90 msgid "Error" -msgstr "" +msgstr "錯誤" #: apostrophe/inhibitor.py:35 msgid "Unsaved documents" -msgstr "" +msgstr "未儲存檔案" #: apostrophe/inline_preview.py:201 msgid "Formula looks incorrect:" -msgstr "" +msgstr "算式看來不正確:" #: apostrophe/inline_preview.py:240 msgid "No matching footnote found" @@ -77,57 +86,56 @@ msgstr "沒有發現相符和的註解" #: apostrophe/inline_preview.py:260 msgid "noun" -msgstr "" +msgstr "名詞" #: apostrophe/inline_preview.py:262 msgid "verb" -msgstr "" +msgstr "動詞" #: apostrophe/inline_preview.py:264 msgid "adjective" -msgstr "" +msgstr "形容詞" #: apostrophe/inline_preview.py:266 msgid "adverb" -msgstr "" +msgstr "副詞" #: apostrophe/main_window.py:340 msgid "Save your File" msgstr "存取您的檔案" #: apostrophe/main_window.py:343 data/ui/Headerbar.ui:225 -#, fuzzy msgid "Save" -msgstr "現在存取" +msgstr "儲存" #: apostrophe/main_window.py:424 msgid "Markdown Files" -msgstr "" +msgstr "Markdown 文件" #: apostrophe/main_window.py:428 msgid "Plain Text Files" -msgstr "" +msgstr "文字文件" #: apostrophe/main_window.py:431 msgid "Open a .md file" -msgstr "" +msgstr "開啟 .md 文件" #: apostrophe/main_window.py:434 data/ui/Headerbar.ui:182 msgid "Open" -msgstr "" +msgstr "開啟" #: apostrophe/main_window.py:498 #, python-format msgid "Save changes to document “%s” before closing?" -msgstr "" +msgstr "是否於關閉前儲存對 \"%s\" 的變更?" #: apostrophe/main_window.py:503 msgid "If you don’t save, all your changes will be permanently lost." -msgstr "" +msgstr "如果不儲存,將永久失去所有變更。" #: apostrophe/main_window.py:506 msgid "Close without saving" -msgstr "" +msgstr "不儲存並關閉" #: apostrophe/main_window.py:509 msgid "Save now" @@ -135,7 +143,7 @@ msgstr "現在存取" #: apostrophe/main_window.py:711 msgid "New File" -msgstr "" +msgstr "新文件" #: apostrophe/preview_renderer.py:47 data/ui/Headerbar.ui:305 msgid "Preview" @@ -143,78 +151,80 @@ msgstr "預覽" #: apostrophe/stats_handler.py:74 msgid "{:n} Characters" -msgstr "" +msgstr "{:n} 字元" #: apostrophe/stats_handler.py:76 msgid "{:n} Words" -msgstr "" +msgstr "{:n} 字" #: apostrophe/stats_handler.py:78 msgid "{:n} Sentences" -msgstr "" +msgstr "{:n} 句子" #: apostrophe/stats_handler.py:80 msgid "{:n} Paragraphs" -msgstr "" +msgstr "{:n} 段落" #: apostrophe/stats_handler.py:82 msgid "{:d}:{:02d}:{:02d} Read Time" -msgstr "" +msgstr "需時 {:d}:{:02d}:{:02d} 閱讀" #: apostrophe/text_view_drag_drop_handler.py:75 #: apostrophe/text_view_drag_drop_handler.py:77 msgid "web page" -msgstr "" +msgstr "網頁" #: apostrophe/text_view_format_inserter.py:14 msgid "italic text" -msgstr "" +msgstr "斜體字" #: apostrophe/text_view_format_inserter.py:19 msgid "bold text" -msgstr "" +msgstr "粗體字" #: apostrophe/text_view_format_inserter.py:24 msgid "strikethrough text" -msgstr "" +msgstr "刪除線" #: apostrophe/text_view_format_inserter.py:50 msgid "Item" -msgstr "" +msgstr "項目" #: apostrophe/text_view_format_inserter.py:98 msgid "Header" -msgstr "" +msgstr "頁頭" #: data/ui/About.ui.in:12 msgid "Copyright (C) 2020, Wolf Vollprecht" -msgstr "" +msgstr "版權 (C) 2020, Wolf Vollprecht" #: data/ui/About.ui.in:14 msgid "Apostrophe website" -msgstr "" +msgstr "Apostrophe 網頁" #. Put your name in here, like this: #. Manuel Genovés #: data/ui/About.ui.in:20 msgid "translator-credits" msgstr "" +"Kdwk\n" +"" #: data/ui/About.ui.in:65 msgid "Donations:" -msgstr "" +msgstr "捐款:" #: data/ui/About.ui.in:74 msgid "Paypal" -msgstr "" +msgstr "Paypal" #: data/ui/About.ui.in:105 msgid "Help to translate:" -msgstr "" +msgstr "協助翻譯:" #: data/ui/About.ui.in:114 msgid "Poeditor" -msgstr "" +msgstr "Poeditor" #: data/ui/Export.ui:154 msgid "Standalone" @@ -224,7 +234,7 @@ msgstr "獨立" msgid "" "Use a header and footer to include things like stylesheets and meta " "information" -msgstr "使用 header 或是 footer 來引入樣式表及初始資料" +msgstr "使用頁眉或是頁腳來引入樣式表及元數據" #: data/ui/Export.ui:171 msgid "Table of Contents" @@ -236,19 +246,19 @@ msgstr "數字區間" #: data/ui/Export.ui:211 data/ui/Export.ui:217 msgid "Page Size" -msgstr "" +msgstr "頁面大小" #: data/ui/Export.ui:236 msgid "HTML Options" -msgstr "" +msgstr "HTML 選項" #: data/ui/Export.ui:242 msgid "Self-contained" -msgstr "" +msgstr "自給自足" #: data/ui/Export.ui:244 msgid "Produces an HTML file with no external dependencies" -msgstr "" +msgstr "匯出沒有依賴項的 HTML 檔案" #: data/ui/Export.ui:260 msgid "CSS File" @@ -256,76 +266,75 @@ msgstr "CSS 檔案" #: data/ui/Export.ui:265 msgid "Select CSS file" -msgstr "" +msgstr "選取 CSS 檔案" #: data/ui/Export.ui:286 msgid "Syntax Highlighting" -msgstr "" +msgstr "Markdown 句法上色" #: data/ui/Export.ui:301 msgid "Highlight style" -msgstr "" +msgstr "上色風格" #: data/ui/Export.ui:322 msgid "Presentation" -msgstr "" +msgstr "幻燈片演示" #: data/ui/Export.ui:328 msgid "Incremental bullets" -msgstr "" +msgstr "遞增的項目符號列表" #: data/ui/Export.ui:330 msgid "Show one bullet point after another in a slideshow" -msgstr "Show one bullet point after another in a slideshow" +msgstr "在幻燈片演示時逐點顯示項目符號列表" #: data/ui/Export.ui:357 msgid "page0" -msgstr "" +msgstr "頁0" #: data/ui/Export.ui:365 msgid "page1" -msgstr "" +msgstr "頁1" #: data/ui/ExportPopover.ui:19 msgid "Save As…" -msgstr "" +msgstr "儲存為..." #: data/ui/ExportPopover.ui:100 msgid "Advanced Export…" -msgstr "" +msgstr "進階匯出..." #: data/ui/ExportPopover.ui:125 msgid "Copy HTML" -msgstr "" +msgstr "複製 HTML" #: data/ui/Headerbar.ui:130 msgid "Sync Views" -msgstr "" +msgstr "同步視圖" #: data/ui/Headerbar.ui:171 msgid "New" -msgstr "" +msgstr "新增" #: data/ui/Headerbar.ui:199 -#, fuzzy msgid "Open Recent" -msgstr "開啟最近使用過的檔案" +msgstr "開啟最近" #: data/ui/Headerbar.ui:242 msgid "Save as…" -msgstr "" +msgstr "儲存為..." #: data/ui/Headerbar.ui:283 msgid "Menu" -msgstr "" +msgstr "菜單" #: data/ui/Headerbar.ui:378 msgid "Find" -msgstr "" +msgstr "尋找" #: data/ui/Menu.ui:43 msgid "Hemingway Mode" -msgstr "" +msgstr "Hemingway 模式" #: data/ui/Menu.ui:57 msgid "Focus Mode" @@ -333,103 +342,98 @@ msgstr "鎖定模式" #: data/ui/Menu.ui:82 msgid "Find and Replace" -msgstr "" +msgstr "搜尋並取代" #: data/ui/Menu.ui:107 data/ui/Preferences.ui:19 msgid "Preferences" -msgstr "" +msgstr "設定" #: data/ui/Menu.ui:132 msgid "Open Tutorial" -msgstr "" +msgstr "怎麼用?" #: data/ui/Menu.ui:146 msgid "Keyboard Shortcuts" -msgstr "" +msgstr "鍵盤捷徑" #: data/ui/Menu.ui:160 msgid "About Apostrophe" -msgstr "" +msgstr "關於 Apostrophe" #: data/ui/Preferences.ui:49 #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:35 msgid "Check spelling while typing" -msgstr "" +msgstr "打字時檢查串法" #: data/ui/Preferences.ui:73 #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:49 msgid "Input format" -msgstr "" +msgstr "輸入格式" #: data/ui/Preferences.ui:110 msgid "Autohide header and statusbars while typing" -msgstr "" +msgstr "打字時自動隱藏標題欄和狀態欄" #: data/ui/Preferences.ui:112 msgid "Autohide headerbar" -msgstr "" +msgstr "自動隱藏標題欄" #: data/ui/Shortcuts.ui:13 msgctxt "shortcut window" msgid "General" -msgstr "" +msgstr "一般" #: data/ui/Shortcuts.ui:17 msgctxt "shortcut window" msgid "New" -msgstr "" +msgstr "新增" #: data/ui/Shortcuts.ui:24 msgctxt "shortcut window" msgid "Open" -msgstr "" +msgstr "開啟" #: data/ui/Shortcuts.ui:31 -#, fuzzy msgctxt "shortcut window" msgid "Save" -msgstr "現在存取" +msgstr "儲存" #: data/ui/Shortcuts.ui:38 -#, fuzzy msgctxt "shortcut window" msgid "Save as" -msgstr "現在存取" +msgstr "儲存為" #: data/ui/Shortcuts.ui:45 msgctxt "shortcut window" msgid "Close document" -msgstr "" +msgstr "關閉文件" #: data/ui/Shortcuts.ui:52 msgctxt "shortcut window" msgid "Quit application" -msgstr "" +msgstr "關閉視窗" #: data/ui/Shortcuts.ui:61 msgctxt "shortcut window" msgid "Modes" -msgstr "" +msgstr "模式" #: data/ui/Shortcuts.ui:65 -#, fuzzy msgctxt "shortcut window" msgid "Focus mode" -msgstr "鎖定模式" +msgstr "專注模式" #: data/ui/Shortcuts.ui:72 msgctxt "shortcut window" msgid "Hemingway mode" -msgstr "" +msgstr "Hemingway 模式" #: data/ui/Shortcuts.ui:79 -#, fuzzy msgctxt "shortcut window" msgid "Preview" msgstr "預覽" #: data/ui/Shortcuts.ui:86 -#, fuzzy msgctxt "shortcut window" msgid "Fullscreen" msgstr "全螢幕" @@ -437,25 +441,24 @@ msgstr "全螢幕" #: data/ui/Shortcuts.ui:95 data/ui/Shortcuts.ui:99 msgctxt "shortcut window" msgid "Find" -msgstr "" +msgstr "搜尋" #: data/ui/Shortcuts.ui:106 msgctxt "shortcut window" msgid "Find and replace" -msgstr "" +msgstr "搜尋並取代" #: data/ui/Shortcuts.ui:115 msgctxt "shortcut window" msgid "Markdown" -msgstr "" +msgstr "Markdown" #: data/ui/Shortcuts.ui:119 msgctxt "shortcut window" msgid "Separator" -msgstr "" +msgstr "分隔線" #: data/ui/Shortcuts.ui:126 -#, fuzzy msgctxt "shortcut window" msgid "List item" msgstr "清單項目" @@ -463,221 +466,223 @@ msgstr "清單項目" #: data/ui/Shortcuts.ui:133 msgctxt "shortcut window" msgid "Italic" -msgstr "" +msgstr "斜體字" #: data/ui/Shortcuts.ui:140 msgctxt "shortcut window" msgid "Bold" -msgstr "" +msgstr "粗體字" #: data/ui/Shortcuts.ui:147 msgctxt "shortcut window" msgid "Strikeout" -msgstr "" +msgstr "刪除線" #: data/ui/Shortcuts.ui:156 msgctxt "shortcut window" msgid "Copy and paste" -msgstr "" +msgstr "複製並貼上" #: data/ui/Shortcuts.ui:160 msgctxt "shortcut window" msgid "Copy selected text to clipboard" -msgstr "" +msgstr "複製已選文字" #: data/ui/Shortcuts.ui:167 msgctxt "shortcut window" msgid "Cut selected text to clipboard" -msgstr "" +msgstr "剪下已選文字" #: data/ui/Shortcuts.ui:174 msgctxt "shortcut window" msgid "Paste selected text from clipboard" -msgstr "" +msgstr "貼上文字" #: data/ui/Shortcuts.ui:183 msgctxt "shortcut window" msgid "Undo and redo" -msgstr "" +msgstr "復原和重做" #: data/ui/Shortcuts.ui:187 msgctxt "shortcut window" msgid "Undo previous command" -msgstr "" +msgstr "復原上一指令" #: data/ui/Shortcuts.ui:194 msgctxt "shortcut window" msgid "Redo previous command" -msgstr "" +msgstr "重做上一指令" #: data/ui/Shortcuts.ui:203 msgctxt "shortcut window" msgid "Selection" -msgstr "" +msgstr "已選" #: data/ui/Shortcuts.ui:207 msgctxt "shortcut window" msgid "Select all text" -msgstr "" +msgstr "全選文字" #: data/ui/Window.ui:107 msgid "Show Statistics" -msgstr "" +msgstr "顯示數據" +# If I'm not mistaken, this is used in search (and replace), so I changed it to 'previous search result' to avoid an awkward and inelegant Chinese translation. #: data/ui/Window.ui:206 msgid "Previous Match" -msgstr "" +msgstr "上一搜尋結果" #: data/ui/Window.ui:220 msgid "Next Match" -msgstr "" +msgstr "下一搜尋結果" #: data/ui/Window.ui:249 msgid "aA" -msgstr "" +msgstr "aA" #: data/ui/Window.ui:253 msgid "Case Sensitive" -msgstr "" +msgstr "區分大小寫" #: data/ui/Window.ui:263 msgid "(.*)" -msgstr "" +msgstr "(.*)" #: data/ui/Window.ui:267 msgid "Regular Expression" -msgstr "" +msgstr "正則表達式" #: data/ui/Window.ui:280 data/ui/Window.ui:358 msgid "Replace" -msgstr "" +msgstr "取代" #: data/ui/Window.ui:372 msgid "Replace All" -msgstr "" +msgstr "全部取代" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:5 #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:3 msgid "Apostrophe" -msgstr "" +msgstr "Apostrophe" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:6 msgid "An elegant, distraction-free markdown editor" -msgstr "" +msgstr "一個簡約、不干擾你工作的 Markdown 編輯器" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:8 msgid "Focus on your writing with a clean, distraction-free markdown editor." -msgstr "" +msgstr "在這個簡潔、不干擾你工作的 Markdown 編輯器裡專注於你的寫作。" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:9 msgid "Features:" -msgstr "" +msgstr "功能:" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:11 msgid "An UI tailored to comfortable writing" -msgstr "" +msgstr "專為舒適寫作而設計的界面" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:12 msgid "A distraction-free mode" -msgstr "" +msgstr "專注模式" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:13 msgid "Dark, light and sepia themes" -msgstr "" +msgstr "淺色、深色和 Sepia 色調" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:14 msgid "" "Everything you expect from a text editor, such as spellchecking or document " "statistics" -msgstr "" +msgstr "所有你對文字編輯軟件的期望,例如串字檢查及文件數據" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:15 msgid "Live preview of what you write" -msgstr "" +msgstr "一邊寫作,一邊即時預覽內容" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:16 msgid "" "Export to all kind of formats: PDF, Word/Libreoffice, LaTeX, or even HTML " "slideshows" -msgstr "" +msgstr "匯出文件至:PDF, Word/ LibreOffice, LaTeX, 甚或是 HTML 幻燈片" #: data/org.gnome.gitlab.somas.Apostrophe.metainfo.xml.in.in:41 msgid "Wolf V., Manuel G." -msgstr "" +msgstr "Wolf V., Manuel G." #. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:5 msgid "uberwriter;UberWriter;apostrophe;markdown;editor;" msgstr "" +"uberwriter;UberWriter;apostrophe;markdown;editor;編輯器;寫作;寫字;文字;文件;" #: data/org.gnome.gitlab.somas.Apostrophe.desktop.in.in:6 msgid "Apostrophe, an elegant, distraction-free markdown editor" -msgstr "" +msgstr "Apostrophe,優雅、簡約、不干擾你寫作的 Markdown 編輯器" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:28 msgid "Color scheme" -msgstr "" +msgstr "色調主題" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:29 msgid "Use the color scheme in the application's UI and in the text area." -msgstr "" +msgstr "在 Apostrophe 的界面使用此色調。" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:36 msgid "Enable or disable spellchecking." -msgstr "" +msgstr "啟用或停用串字檢查。" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:42 msgid "Synchronize editor/preview scrolling" -msgstr "" +msgstr "同步滾動編輯器和預覽器" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:43 msgid "Keep the editor and preview scroll positions in sync." -msgstr "" +msgstr "同步編輯器和預覽器的滾動位置。" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:50 msgid "Input format to use when previewing and exporting using Pandoc." -msgstr "" +msgstr "當用 Pandoc 預覽和匯出時所用的輸入模式。" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:56 msgid "Autohide Headerbar" -msgstr "" +msgstr "自動隱藏標題欄" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:57 msgid "Hide the header and status bars when typing." -msgstr "" +msgstr "打字時隱藏標題欄和狀態欄" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:63 msgid "Open file base path" -msgstr "" +msgstr "開啟文件所在的文件夾" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:64 msgid "Open file paths of the current session" -msgstr "" +msgstr "打開所有已開啟的文件所在的文件夾" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:70 msgid "Default statistic" -msgstr "" +msgstr "預設數據" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:71 msgid "Which statistic is shown on the main window." -msgstr "" +msgstr "哪項數據在主視窗中顯示。" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:77 msgid "Characters per line" -msgstr "" +msgstr "每行字元數目" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:78 msgid "Maximum number of characters per line within the editor." -msgstr "" +msgstr "在編輯器中每行最多字元數目。" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:84 msgid "Preview mode" -msgstr "" +msgstr "預覽模式" #: data/org.gnome.gitlab.somas.Apostrophe.gschema.xml:85 msgid "How to display the preview." -msgstr "" +msgstr "如何顯示預覽模式。" #, fuzzy #~ msgid "Use dark mode" -#~ msgstr "陰暗模式" +#~ msgstr "深色色調" -- 2.40.1 From 62f2c2d537b69ece490ed9cf7e9e40940bea5dcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Mon, 25 Jul 2022 00:52:07 +0200 Subject: [PATCH 015/134] MVP port to GTK4 The following modules have been ported: - Application - WIndow - TextView - Markup handler - Headerbars - Open Popover - Preview Layout Switcher - Theme switcher - Search and replace - Stats handler Undo/redo handler and DnD handler were not longer necessary thanks to GTK4 and have been removed. Stats handler now support selection stats Hemingway mode has gained visual feedback Styles have been improved, and have been ported to CSS Some animations have been ported to AdwAnimation Closes #231 --- NEWS | 10 + apostrophe/application.py | 168 ++--- apostrophe/export_dialog.py | 2 +- apostrophe/fix_table.py | 2 +- apostrophe/headerbars.py | 38 +- apostrophe/helpers.py | 31 +- apostrophe/inline_preview.py | 16 +- apostrophe/main_window.py | 475 +++++++------- apostrophe/open_popover.py | 17 +- apostrophe/preferences_dialog.py | 2 +- apostrophe/preview_layout_switcher.py | 23 +- apostrophe/preview_window.py | 2 +- apostrophe/search_and_replace.py | 37 +- apostrophe/stats_handler.py | 83 ++- apostrophe/text_view.py | 208 ++++-- apostrophe/text_view_drag_drop_handler.py | 95 --- apostrophe/text_view_markup_handler.py | 34 +- apostrophe/text_view_scroller.py | 10 +- apostrophe/text_view_undo_redo_handler.py | 245 ------- apostrophe/theme_switcher.py | 51 +- apostrophe/tweener.py | 94 --- .../org.gnome.gitlab.somas.Apostrophe.json | 69 +- data/apostrophe.gresource.xml | 11 +- data/media/css/gtk/Adwaita-dark-hc.scss | 5 - data/media/css/gtk/Adwaita-dark.scss | 5 - data/media/css/gtk/Adwaita-hc.scss | 5 - data/media/css/gtk/Adwaita-sepia-hc.scss | 7 - data/media/css/gtk/Adwaita-sepia.scss | 7 - data/media/css/gtk/Adwaita.scss | 5 - data/media/css/gtk/_base.scss | 241 ------- data/media/css/gtk/_definitions.scss | 32 - data/media/css/gtk/_drawing.scss | 615 ------------------ data/media/css/gtk/_recoloring.scss | 127 ---- data/media/css/gtk/bindings.css | 16 - data/media/css/gtk/meson.build | 96 --- data/media/css/gtk/style-dark.css | 2 + data/media/css/gtk/style-sepia.css | 13 + data/media/css/gtk/style.css | 219 +++++++ data/meson.build | 3 +- ....gnome.gitlab.somas.Apostrophe.gschema.xml | 7 + data/ui/AboutHemingway.ui | 16 + data/ui/Headerbar.ui | 585 ++++------------- data/ui/PreviewLayoutSwitcher.ui | 68 +- data/ui/PreviewLayoutSwitcherItem.ui | 21 +- data/ui/Recents.ui | 51 +- data/ui/SearchBar.ui | 277 +++----- data/ui/TextView.ui | 80 ++- data/ui/ThemeSwitcher.ui | 139 +--- data/ui/Window.ui | 197 +++--- meson.build | 4 +- po/POTFILES.in | 2 +- 51 files changed, 1375 insertions(+), 3193 deletions(-) delete mode 100644 apostrophe/text_view_drag_drop_handler.py delete mode 100644 apostrophe/text_view_undo_redo_handler.py delete mode 100644 apostrophe/tweener.py delete mode 100644 data/media/css/gtk/Adwaita-dark-hc.scss delete mode 100644 data/media/css/gtk/Adwaita-dark.scss delete mode 100644 data/media/css/gtk/Adwaita-hc.scss delete mode 100644 data/media/css/gtk/Adwaita-sepia-hc.scss delete mode 100644 data/media/css/gtk/Adwaita-sepia.scss delete mode 100644 data/media/css/gtk/Adwaita.scss delete mode 100644 data/media/css/gtk/_base.scss delete mode 100644 data/media/css/gtk/_definitions.scss delete mode 100644 data/media/css/gtk/_drawing.scss delete mode 100644 data/media/css/gtk/_recoloring.scss delete mode 100644 data/media/css/gtk/bindings.css delete mode 100644 data/media/css/gtk/meson.build create mode 100644 data/media/css/gtk/style-dark.css create mode 100644 data/media/css/gtk/style-sepia.css create mode 100644 data/media/css/gtk/style.css create mode 100644 data/ui/AboutHemingway.ui diff --git a/NEWS b/NEWS index 7203b24..cb89d3a 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,13 @@ +Version 3.0.alpha +~~~~~~~~~~~~~~~ +Released: + +Features: +- GTK4 port +- Live stats for selected text +- Improved UI and styling +- Improved Hemingway Mode + Version 2.6.3 ~~~~~~~~~~~~~~~ Released: 2022-04-29 diff --git a/apostrophe/application.py b/apostrophe/application.py index c0e6d4a..dc836bb 100644 --- a/apostrophe/application.py +++ b/apostrophe/application.py @@ -14,20 +14,19 @@ import gi +gi.require_version('Gtk', '4.0') +gi.require_version('Adw', '1') +from gi.repository import Adw, Gdk, Gio, GLib, Gtk -gi.require_version('Gtk', '3.0') -gi.require_version('Handy', '1') -from gi.repository import GLib, Gio, Gtk, Gdk, Handy - -from apostrophe.main_window import MainWindow -from apostrophe.settings import Settings from apostrophe.helpers import set_up_logging -from apostrophe.preferences_dialog import ApostrophePreferencesDialog +# from apostrophe.preferences_dialog import ApostrophePreferencesDialog from apostrophe.inhibitor import Inhibitor +from apostrophe.main_window import MainWindow +from apostrophe.settings import Settings from apostrophe.theme_switcher import Theme -class Application(Gtk.Application): +class Application(Adw.Application): def __init__(self, application_id, *args, **kwargs): super().__init__(*args, application_id=application_id, @@ -37,52 +36,34 @@ class Application(Gtk.Application): self.add_main_option("verbose", b"v", GLib.OptionFlags.NONE, GLib.OptionArg.NONE, "Verbose output", None) - # Hardcode Adwaita to prevent issues with third party themes - gtk_settings = Gtk.Settings.get_default() - self._set_theme(gtk_settings) - gtk_settings.connect("notify::gtk-theme-name", self._set_theme) - gtk_settings.connect("notify::gtk-icon-theme-name", self._set_theme) + self.set_resource_base_path("/org/gnome/gitlab/somas/Apostrophe") + # gtk_settings = Gtk.Settings.get_default() + + self.windows = [] + self.settings = Settings.new() + self.inhibitor = None + self._application_id = application_id + + def do_startup(self): + Adw.Application.do_startup(self) # Set css theme - css_provider_file = Gio.File.new_for_uri( - "resource:///org/gnome/gitlab/somas/Apostrophe/media/css/gtk/Adwaita.css") - self.style_provider = Gtk.CssProvider() - self.style_provider.load_from_file(css_provider_file) - Gtk.StyleContext.add_provider_for_screen( - Gdk.Screen.get_default(), self.style_provider, - Gtk.STYLE_PROVIDER_PRIORITY_USER) + css_sepia_provider_file = Gio.File.new_for_uri( + "resource:///org/gnome/gitlab/somas/Apostrophe/style-sepia.css") + self.sepia_style_provider = Gtk.CssProvider() + self.sepia_style_provider.load_from_file(css_sepia_provider_file) # Style manager - style_manager = Handy.StyleManager.get_default() + style_manager = Adw.StyleManager.get_default() style_manager.connect("notify::dark", self._set_color_scheme) style_manager.connect("notify::high-contrast", self._set_color_scheme) - - # Set editor keybindings - # SCSS is not fit for this, so we do it in an external css file - css_bindings_file = Gio.File.new_for_uri( - "resource:///org/gnome/gitlab/somas/Apostrophe/media/css/gtk/bindings.css") - self.bindings_provider = Gtk.CssProvider() - self.bindings_provider.load_from_file(css_bindings_file) - Gtk.StyleContext.add_provider_for_screen( - Gdk.Screen.get_default(), self.bindings_provider, - Gtk.STYLE_PROVIDER_PRIORITY_USER) # Set icons - Gtk.IconTheme.get_default().add_resource_path( + Gtk.IconTheme.get_for_display( + Gdk.Display.get_default()).add_resource_path( "/org/gnome/gitlab/somas/Apostrophe/icons" ) - Handy.init() - - self.windows = [] - self.settings = Settings.new() - self.inhibitor = None - self._application_id = application_id - - def do_startup(self, *args, **kwargs): - - Gtk.Application.do_startup(self) - color_scheme = self.settings.get_string("color-scheme") action = Gio.SimpleAction.new_stateful( @@ -95,9 +76,9 @@ class Application(Gtk.Application): action.connect("activate", self.on_new_window) self.add_action(action) - action = Gio.SimpleAction.new("preferences", None) - action.connect("activate", self.on_preferences) - self.add_action(action) + # action = Gio.SimpleAction.new("preferences", None) + # action.connect("activate", self.on_preferences) + # self.add_action(action) action = Gio.SimpleAction.new("shortcuts", None) action.connect("activate", self.on_shortcuts) @@ -131,7 +112,7 @@ class Application(Gtk.Application): self.set_accels_for_action("win.find_replace", ["h"]) self.set_accels_for_action("app.spellcheck", ["F7"]) - self.set_accels_for_action("win.new", ["n"]) + self.set_accels_for_action("app.new", ["n"]) self.set_accels_for_action("win.open", ["o"]) self.set_accels_for_action("win.save", ["s"]) self.set_accels_for_action("win.save_as", ["s"]) @@ -145,77 +126,61 @@ class Application(Gtk.Application): if not self.windows: self.settings.connect("changed", self.on_settings_changed) - self.windows.append(MainWindow(self)) + group = Gtk.WindowGroup.new() + group.add_window(MainWindow(self)) + + self.windows.append(group) if self._application_id == 'org.gnome.gitlab.somas.Apostrophe.Devel': - for window in self.windows: - window.get_style_context().add_class('devel') + for window_group in self.windows: + for window in window_group.list_windows(): + window.get_style_context().add_class('devel') self._set_color_scheme() - self.windows[-1].present() + self.windows[-1].list_windows()[-1].present() def do_handle_local_options(self, options): if options.contains("verbose") or self._application_id \ == 'org.gnome.gitlab.somas.Apostrophe.Devel': - set_up_logging(1) return -1 def do_open(self, files, _n_files, _hint): self.activate() + empty_window_groups = list(filter(lambda window_group: + window_group.list_windows()[0].textview.get_text() == "" and\ + not window_group.list_windows()[0].did_change, self.windows)) for i, file in enumerate(files): - if i == 0: - window = self.windows[0] + if i < len(empty_window_groups): + window = empty_window_groups[i].list_windows()[0] else: window = MainWindow(self) - window.load_file(file) - window.present() - self.windows.append(window) - - def _set_theme(self, settings, *_pspec): - # Third party themes cause issues with Apostrophe custom stylesheets - # If the user has a third party theme selected, we just change it to - # Adwaita to prevent those issues - # TODO: GTK4 - remove this - - theme_name = settings.get_property("gtk-theme-name") - icon_theme_name = settings.get_property("gtk-icon-theme-name") - - if (theme_name not in ["Adwaita", - "HighContrast", - "HighContrastInverse"]): - settings.set_property("gtk-theme-name", "Adwaita") + group = Gtk.WindowGroup.new() + group.add_window(window) + self.windows.append(group) + window.load_file(file) + window.present() def _set_color_scheme(self, *args, **kwargs): - # TODO: GTK4 - remove this - theme = Theme.get_current() - - style_manager = Handy.StyleManager.get_default() - dark = style_manager.get_dark() - sepia = theme.name == "sepia" - hc = style_manager.get_high_contrast() + sepia = Theme.get_current().name == "sepia" if not self.windows: return if sepia: - if hc: - self.style_provider.load_from_file(theme.gtk_css_hc) - else: - self.style_provider.load_from_file(theme.gtk_css) - elif dark: - if hc: - self.style_provider.load_from_file(Theme.get_for_name("dark").gtk_css_hc) - else: - self.style_provider.load_from_file(Theme.get_for_name("dark").gtk_css) + Gtk.StyleContext.add_provider_for_display( + Gdk.Display.get_default(), self.sepia_style_provider, + Gtk.STYLE_PROVIDER_PRIORITY_USER) else: - if hc: - self.style_provider.load_from_file(Theme.get_for_name("light").gtk_css_hc) - else: - self.style_provider.load_from_file(Theme.get_for_name("light").gtk_css) + Gtk.StyleContext.remove_provider_for_display( + Gdk.Display.get_default(), self.sepia_style_provider + ) + # refresh markup colors + for group in self.windows: + group.list_windows()[0].textview.markup.on_style_updated() def on_settings_changed(self, settings, key): # TODO: change this ffs @@ -224,19 +189,21 @@ class Application(Gtk.Application): if key == "color-scheme": self._set_color_scheme() elif key == "input-format": - for window in self.windows: - window.reload_preview() + for group in self.windows.list_windows(): + group.list_windows()[0].reload_preview() elif key == "sync-scroll": - for window in self.windows: - window.reload_preview(reshow=True) + for group in self.windows.list_windows(): + group.list_windows()[0].reload_preview(reshow=True) elif key == "stat-default": - for window in self.windows: - window.update_default_stat() + for group in self.windows.list_windows(): + group.list_windows()[0].update_default_stat() def on_new_window(self, _action, _value): window = MainWindow(self) window.present() - self.windows.append(window) + group = Gtk.WindowGroup.new() + group.add_window(window) + self.windows.append(group) def on_preferences(self, _action, _value): preferences_dialog = ApostrophePreferencesDialog() @@ -262,9 +229,8 @@ class Application(Gtk.Application): def on_quit(self, _action, _param): quit = True - for window in self.windows: - window.present() - if window.on_delete_called(self): + for group in self.windows: + if group.list_windows()[0].do_close_request(): quit = False if quit: self.quit() diff --git a/apostrophe/export_dialog.py b/apostrophe/export_dialog.py index cfbb774..f997e22 100644 --- a/apostrophe/export_dialog.py +++ b/apostrophe/export_dialog.py @@ -28,7 +28,7 @@ from zipfile import ZipFile import json import gi -gi.require_version('Gtk', '3.0') +gi.require_version('Gtk', '4.0') gi.require_version('Handy', '1') from gi.repository import Gtk, Gdk, Gio, GObject, Handy diff --git a/apostrophe/fix_table.py b/apostrophe/fix_table.py index 5a3935e..6dc940e 100644 --- a/apostrophe/fix_table.py +++ b/apostrophe/fix_table.py @@ -1,6 +1,6 @@ import re import gi -gi.require_version('Gtk', '3.0') +gi.require_version('Gtk', '4.0') import logging logger = logging.getLogger('apostrophe') diff --git a/apostrophe/headerbars.py b/apostrophe/headerbars.py index 3ae7de6..2d75212 100644 --- a/apostrophe/headerbars.py +++ b/apostrophe/headerbars.py @@ -15,16 +15,17 @@ """Manage all the headerbars related stuff """ +from gettext import gettext as _ + import gi -from gettext import gettext as _ +gi.require_version('Gtk', '4.0') +from gi.repository import Adw, GLib, GObject, Gtk -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, GLib, GObject, Handy +from .open_popover import ApostropheOpenPopover +from .preview_layout_switcher import PreviewLayoutSwitcher from .settings import Settings from .theme_switcher import ThemeSwitcher -from .preview_layout_switcher import PreviewLayoutSwitcher -from .open_popover import ApostropheOpenPopover @Gtk.Template(resource_path='/org/gnome/gitlab/somas/Apostrophe/ui/Headerbar.ui') @@ -36,34 +37,25 @@ class BaseHeaderbar(Gtk.Revealer): """ headerbar = Gtk.Template.Child() - tutorial_button = Gtk.Template.Child() - preview_layout_switcher = Gtk.Template.Child() + menu_button = Gtk.Template.Child() + open_menu = Gtk.Template.Child() + #preview_layout_switcher = Gtk.Template.Child() is_fullscreen = GObject.property(type=bool, default=False) title = GObject.Property(type=str) subtitle = GObject.Property(type=str) - @GObject.Property(type=int) - def allocated_height(self): - return self.get_allocated_height() - def __init__(self, **kwargs): super().__init__(**kwargs) - self.bind_property("is-fullscreen", self.headerbar, "show-close-button", 6) + # TODO - move to ui file, check on start + self.bind_property("is-fullscreen", self.headerbar, "show-start-title-buttons", 6) + self.bind_property("is-fullscreen", self.headerbar, "show-end-title-buttons", 6) - tutorial = GLib.Variant.new_string("resource:///org/gnome/gitlab/somas/" - "Apostrophe/media/apostrophe_markdown.md") - self.tutorial_button.set_action_target_value(tutorial) + popover = self.menu_button.get_popover() + popover.add_child(ThemeSwitcher(), "themeswitcher") self.settings = Settings.new() - #self.select_preview_layout_row() - @Gtk.Template.Callback() - def on_show_hide(self, widget, event): - ''' The crossfade animation doesn't hide the alocated space - for the headerbar. This prevents having an empty space there - ''' - if not self.get_child_revealed(): - self.set_visible(False) + #self.select_preview_layout_row() \ No newline at end of file diff --git a/apostrophe/helpers.py b/apostrophe/helpers.py index 66c494e..d9f50b7 100644 --- a/apostrophe/helpers.py +++ b/apostrophe/helpers.py @@ -18,21 +18,18 @@ import logging import os import shutil from contextlib import contextmanager - -from typing import List - from gettext import gettext as _ +from typing import List import gi import pypandoc from gi.overrides.Pango import Pango -gi.require_version('Gtk', '3.0') -gi.require_version('Handy', '1') -from gi.repository import Gtk, Gio, Handy # pylint: disable=E0611 +gi.require_version('Gtk', '4.0') +from gi.repository import Adw, Gio, Gtk # pylint: disable=E0611 -from apostrophe.settings import Settings from apostrophe import config +from apostrophe.settings import Settings __apostrophe_data_directory__ = '../data/' @@ -82,14 +79,10 @@ def set_up_logging(level): def show_error(parent, message): - dialog = Gtk.MessageDialog( - parent, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, - Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE, message) - - dialog.set_title(_("Error")) - dialog.run() - dialog.destroy() - + dialog = Adw.MessageDialog.new(parent, _("Error"), message) + dialog.add_response("close", _("Close")) + dialog.set_close_response("close") + dialog.show() def exist_executable(command): """return if a command can be executed in the SO @@ -105,20 +98,20 @@ def exist_executable(command): def liststore_from_list(str_list: List[str]): - """return a Gtk.ListStore object of Handy.TypeValues + """return a Gtk.ListStore object of Gtk.StringObjects constructed after a list of strings Arguments: str_list {List[str]} -- a list of strings Returns: - {Gtk.ListStore} -- a ListStore of Handy.ValueObjects + {Gtk.ListStore} -- a ListStore of Gtk.StringObject """ - list_store = Gio.ListStore.new(Handy.ValueObject) + list_store = Gio.ListStore.new(Gtk.StringObject) for element in str_list: - obj = Handy.ValueObject.new(element) + obj = Gtk.StringObject.new(element) list_store.append(obj) return list_store diff --git a/apostrophe/inline_preview.py b/apostrophe/inline_preview.py index 6e2fcc8..8b15498 100644 --- a/apostrophe/inline_preview.py +++ b/apostrophe/inline_preview.py @@ -13,18 +13,19 @@ # with this program. If not, see . # END LICENSE -import re import os +import re import telnetlib from gettext import gettext as _ from urllib.parse import unquote import gi -gi.require_version("Gtk", "3.0") -gi.require_version("WebKit2", "4.0") -from gi.repository import Gtk, Gdk, GdkPixbuf, GLib -from gi.repository import WebKit2 +gi.require_version("Gtk", "4.0") +# gi.require_version("WebKit2", "4.0") +from gi.repository import Gdk, GdkPixbuf, GLib, Gtk + +# from gi.repository import WebKit2 from apostrophe import latex_to_PNG, markup_regex from apostrophe.settings import Settings @@ -160,8 +161,8 @@ class InlinePreview: self.settings = Settings.new() self.text_view = text_view - self.text_view.connect("button-press-event", - self.on_button_press_event) + self.text_view.gesture_controller.connect("pressed", + self.on_button_press_event) self.text_buffer = text_view.get_buffer() self.cursor_mark = self.text_buffer.create_mark( "click", @@ -218,6 +219,7 @@ class InlinePreview: self.HEIGHT)) def get_view_for_link(self, match): + return url = match.group("url") web_view = WebKit2.WebView(zoom_level=0.3125) # ~1280x960 web_view.set_size_request(self.WIDTH, self.HEIGHT) diff --git a/apostrophe/main_window.py b/apostrophe/main_window.py index eeb0b4c..4b13f33 100644 --- a/apostrophe/main_window.py +++ b/apostrophe/main_window.py @@ -15,32 +15,30 @@ import logging import os +from dataclasses import dataclass from gettext import gettext as _ -from dataclasses import dataclass import chardet - import gi -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, Gdk, GObject, GLib, Gio, Handy -from apostrophe.export_dialog import ExportDialog, AdvancedExportDialog -from apostrophe.preview_handler import PreviewHandler -from apostrophe.stats_handler import StatsHandler -from apostrophe.text_view import ApostropheTextView +gi.require_version('Gtk', '4.0') +from gi.repository import Adw, Gdk, Gio, GLib, GObject, Gtk + +from apostrophe import helpers +# from apostrophe.export_dialog import ExportDialog, AdvancedExportDialog +from apostrophe.headerbars import BaseHeaderbar +from apostrophe.helpers import App from apostrophe.search_and_replace import ApostropheSearchBar from apostrophe.settings import Settings -from apostrophe.tweener import Tweener -from apostrophe.helpers import App -from apostrophe import helpers - -from .headerbars import BaseHeaderbar +# from apostrophe.preview_handler import PreviewHandler +from apostrophe.stats_handler import StatsHandler +from apostrophe.text_view import ApostropheTextView LOGGER = logging.getLogger('apostrophe') @Gtk.Template(resource_path='/org/gnome/gitlab/somas/Apostrophe/ui/Window.ui') -class MainWindow(Handy.ApplicationWindow): +class MainWindow(Adw.ApplicationWindow): __gtype_name__ = "ApostropheWindow" @@ -48,26 +46,26 @@ class MainWindow(Handy.ApplicationWindow): editor_scrolledwindow = Gtk.Template.Child() save_progressbar = Gtk.Template.Child() headerbar = Gtk.Template.Child() - headerbar_eventbox = Gtk.Template.Child() searchbar = Gtk.Template.Child() stats_revealer = Gtk.Template.Child() stats_button = Gtk.Template.Child() - flap = Gtk.Template.Child() - # TODO ?? - preview_stack = Gtk.Template.Child() - text_view = Gtk.Template.Child() - editor = Gtk.Template.Child() + # flap = Gtk.Template.Child() + # # TODO ?? + # preview_stack = Gtk.Template.Child() + toast_overlay = Gtk.Template.Child() + textview = Gtk.Template.Child() + # editor = Gtk.Template.Child() subtitle = GObject.Property(type=str) is_fullscreen = GObject.Property(type=bool, default=False) - headerbar_visible = GObject.Property(type=bool, default=True) - bottombar_visible = GObject.Property(type=bool, default=True) preview = GObject.Property(type=bool, default=False) preview_layout = GObject.Property(type=int, default=1) did_change = GObject.Property(type=bool, default=False) + close_anyway = False + def __init__(self, app): """Set up the main window""" @@ -79,47 +77,62 @@ class MainWindow(Handy.ApplicationWindow): # Preferences self.settings = Settings.new() + # Connect signals that we can't connect on the UI file + self.connect("notify::is-fullscreen", self._on_fullscreen) # Create new, empty file # TODO: load last opened file? self.current = File() # Setup text editor - self.text_view.get_buffer().connect('changed', self.on_text_changed) - self.text_view.grab_focus() + self.textview.get_buffer().connect('changed', self.on_text_changed) # Setup save progressbar an its animator - self.progressbar_initiate_tw = Tweener(self.save_progressbar, - self.save_progressbar.set_fraction, - 0, 0.125, 40) - self.progressbar_finalize_tw = Tweener(self.save_progressbar, - self.save_progressbar.set_fraction, - 0.125, 1, 400) - self.progressbar_opacity_tw = Tweener(self.save_progressbar, - self.save_progressbar.set_opacity, - 1, 0, 300, 200, - callback = self.save_progressbar.set_visible, - callback_arg = False) + def hide_progressbar(animation, *args): + self.save_progressbar.hide() + + fade_target = Adw.PropertyAnimationTarget.new(self.save_progressbar, "opacity") + self.progressbar_fade_out = Adw.TimedAnimation.new(self.save_progressbar, 1, 0, 500, fade_target) + self.progressbar_fade_out.set_easing(Adw.Easing.EASE_OUT_CUBIC) + self.progressbar_fade_out.connect("done", hide_progressbar) + + def on_progressbar_value(animation, *args): + if animation.get_value() > 0.3 and self.did_change: + animation.pause() + + def fade_out_progressbar(animation, *args): + self.progressbar_fade_out.play() + + fraction_target = Adw.PropertyAnimationTarget.new(self.save_progressbar, "fraction") + self.progressbar_animation = Adw.TimedAnimation.new(self.save_progressbar, 0, 1, 300, fraction_target) + self.progressbar_animation.connect("notify::value", on_progressbar_value) + self.progressbar_animation.connect("done", fade_out_progressbar) # Setup stats counter - self.stats_handler = StatsHandler(self.stats_button, self.text_view) + self.stats_handler = StatsHandler(self.stats_button, self.textview) # Setup preview - self.preview_handler = PreviewHandler(self, self.text_view, self.flap) + #self.preview_handler = PreviewHandler(self, self.textview, self.flap) # Setting up spellcheck - self.settings.bind("spellcheck", self.text_view, - "spellcheck", Gio.SettingsBindFlags.GET) + #self.settings.bind("spellcheck", self.textview, + # "spellcheck", Gio.SettingsBindFlags.GET) # Setting up text size - self.settings.bind("bigger-text", self.text_view, + self.settings.bind("bigger-text", self.textview, "bigger_text", Gio.SettingsBindFlags.GET) - self.settings.bind("characters-per-line", self.text_view, + self.settings.bind("characters-per-line", self.textview, "line_chars", Gio.SettingsBindFlags.GET) # Search and replace initialization - self.searchbar.attach(self.text_view) + self.searchbar.attach(self.textview) + + # Hemingway Toast + self.hemingway_toast = Adw.Toast.new(_("Text can't be deleted while on Hemingway mode")) + self.hemingway_toast.set_timeout(3) + self.hemingway_toast.set_action_name("win.show_hemingway_help") + self.hemingway_toast.set_button_label(_("Tell me more")) # Actions action = Gio.PropertyAction.new("find", self.searchbar, "search-mode-enabled") @@ -128,10 +141,19 @@ class MainWindow(Handy.ApplicationWindow): action = Gio.PropertyAction.new("find_replace", self.searchbar, "replace-mode-enabled") self.add_action(action) - action = Gio.PropertyAction.new("focus_mode", self.text_view, "focus-mode") + action = Gio.PropertyAction.new("focus_mode", self.textview, "focus-mode") + self.add_action(action) + + action = Gio.PropertyAction.new("hemingway_mode", self.textview, "hemingway-mode") + self.add_action(action) + self.textview.connect("notify::hemingway-mode", self.show_hemingway_toast) + + action = Gio.SimpleAction.new("show_hemingway_toast", None) + action.connect("activate", self.show_hemingway_toast) self.add_action(action) - action = Gio.PropertyAction.new("hemingway_mode", self.text_view, "hemingway-mode") + action = Gio.SimpleAction.new("show_hemingway_help", None) + action.connect("activate", self.show_hemingway_help) self.add_action(action) action = Gio.PropertyAction.new("fullscreen", self, "is-fullscreen") @@ -139,9 +161,9 @@ class MainWindow(Handy.ApplicationWindow): action = Gio.PropertyAction.new("preview", self, "preview") self.add_action(action) - self.connect("notify::preview", self.toggle_preview) - + #self.connect("notify::preview", self.toggle_preview) + # currently unused, we rather open a new window action = Gio.SimpleAction.new("new", None) action.connect("activate", self.new_document) self.add_action(action) @@ -162,40 +184,40 @@ class MainWindow(Handy.ApplicationWindow): action.connect("activate", self.save_document_as) self.add_action(action) - action = Gio.SimpleAction.new("export", GLib.VariantType("s")) - action.connect("activate", self.open_export) - self.add_action(action) + # action = Gio.SimpleAction.new("export", GLib.VariantType("s")) + # action.connect("activate", self.open_export) + # self.add_action(action) - action = Gio.SimpleAction.new("advanced_export", None) - action.connect("activate", self.open_advanced_export) - self.add_action(action) + # action = Gio.SimpleAction.new("advanced_export", None) + # action.connect("activate", self.open_advanced_export) + # self.add_action(action) - action = Gio.SimpleAction.new("copy_html", None) - action.connect("activate", self.copy_html_to_clipboard) - self.add_action(action) + # action = Gio.SimpleAction.new("copy_html", None) + # action.connect("activate", self.copy_html_to_clipboard) + # self.add_action(action) + + scrollbar = self.editor_scrolledwindow.get_vscrollbar() + scrollbar.set_margin_top(54) + scrollbar.set_margin_bottom(48) + + vadjustment = self.editor_scrolledwindow.get_vadjustment() + vadjustment.connect("notify::value", self._on_scroll) # not really necessary but we'll keep a preview_layout property on the window # and bind it both to the switcher and the renderer self.preview_layout = self.settings.get_enum("preview-mode") - self.bind_property("preview_layout", self.headerbar.preview_layout_switcher, - "preview_layout", GObject.BindingFlags.BIDIRECTIONAL|GObject.BindingFlags.SYNC_CREATE) + # self.bind_property("preview_layout", self.headerbar.preview_layout_switcher, + # "preview_layout", GObject.BindingFlags.BIDIRECTIONAL|GObject.BindingFlags.SYNC_CREATE) - self.bind_property("preview_layout", self.preview_handler.preview_renderer, - "preview_layout", GObject.BindingFlags.SYNC_CREATE) + # self.bind_property("preview_layout", self.preview_handler.preview_renderer, + # "preview_layout", GObject.BindingFlags.SYNC_CREATE) self.preview = self.settings.get_boolean("preview-active") - self.text_view.hemingway_mode = self.settings.get_boolean("hemingway-mode") + self.textview.hemingway_mode = self.settings.get_boolean("hemingway-mode") self.new_document() - # TODO: change to closures on GTK4 - # "Bind" scrolled window's scrollbar margin to headerbar visibility - @Gtk.Template.Callback() - def headerbar_revealed_cb(self, widget, *args): - scrollbar = self.editor_scrolledwindow.get_vscrollbar() - scrollbar.set_margin_top(46 if widget.get_reveal_child() else 0) - def on_text_changed(self, *_args): """called when the text changes, sets the self.did_change to true and updates the title and the counters to reflect that @@ -207,7 +229,15 @@ class MainWindow(Handy.ApplicationWindow): if self.settings.get_value("autohide-headerbar"): self.hide_headerbar_bottombar() - @Gtk.Template.Callback() + def _on_scroll(self, *args): + """called when there's scroll. If value is 0 there's no scrolling and + we add an inset shadow + """ + if self.editor_scrolledwindow.get_vadjustment().get_value() != 0: + self.add_css_class("scrolled") + else: + self.remove_css_class("scrolled") + def _on_fullscreen(self, *args, **kwargs): """Puts the application in fullscreen mode and show/hides the poller for motion in the top border @@ -219,18 +249,18 @@ class MainWindow(Handy.ApplicationWindow): self.unfullscreen() self.reveal_headerbar_bottombar() - self.text_view.grab_focus() + self.textview.grab_focus() def toggle_preview(self, *args, **kwargs): """Toggle the preview mode """ if self.preview: - self.text_view.grab_focus() + self.textview.grab_focus() self.preview_handler.show() else: self.preview_handler.hide() - self.text_view.grab_focus() + self.textview.grab_focus() def save_document(self, _action=None, _value=None, sync: bool = False) -> bool: """Try to save buffer in the current gfile. @@ -244,6 +274,7 @@ class MainWindow(Handy.ApplicationWindow): bool: True if the document was saved correctly """ + self.reveal_headerbar_bottombar() if self.current.gfile: LOGGER.info("saving") @@ -252,10 +283,10 @@ class MainWindow(Handy.ApplicationWindow): # if that fails as well, we return False try: try: - encoded_text = self.text_view.get_text()\ + encoded_text = self.textview.get_text()\ .encode(self.current.encoding) except UnicodeEncodeError: - encoded_text = self.text_view.get_text()\ + encoded_text = self.textview.get_text()\ .encode("UTF-8") self.current.encoding = "UTF-8" except UnicodeEncodeError as error: @@ -265,7 +296,7 @@ class MainWindow(Handy.ApplicationWindow): else: self.save_progressbar.set_opacity(1) self.save_progressbar.set_visible(True) - self.progressbar_initiate_tw.start() + self.progressbar_animation.play() # we allow synchronously saving operations # for result-dependant code @@ -278,23 +309,22 @@ class MainWindow(Handy.ApplicationWindow): flags=Gio.FileCreateFlags.NONE, cancellable=None) except GLib.GError as error: - helpers.show_error(self, str(error.message)) LOGGER.warning(str(error.message)) - self.progressbar_opacity_tw.start() self.did_change = True + self.progressbar_fade_out.play() + helpers.show_error(self, str(error.message)) return False if res: - self.progressbar_initiate_tw.stop() - self.progressbar_finalize_tw.start() - self.progressbar_opacity_tw.start() + if self.progressbar_animation.get_state() == Adw.AnimationState.PAUSED: + self.progressbar_animation.resume() self.update_headerbar_title() self.did_change = False return True else: - self.progressbar_opacity_tw.start() + self.progressbar_fade_out.play() self.did_change = True return False @@ -318,73 +348,73 @@ class MainWindow(Handy.ApplicationWindow): where they want. Call set_headbar_title after that """ + def on_response(dialog, response): + if response == Gtk.ResponseType.ACCEPT: + + file = dialog.get_file() + + if not file.query_exists(): + try: + file.create(Gio.FileCreateFlags.NONE) + except GLib.GError as error: + helpers.show_error(self, str(error.message)) + LOGGER.warning(str(error.message)) + return False + + self.current.gfile = file + + recents_manager = Gtk.RecentManager.get_default() + recents_manager.add_item(self.current.gfile.get_uri()) + + self.update_headerbar_title(False, True) + dialog.destroy() + return self.save_document() + else: + return False + filefilter = Gtk.FileFilter.new() filefilter.add_mime_type('text/x-markdown') filefilter.add_mime_type('text/plain') filefilter.set_name('Markdown (.md)') - filechooser = Gtk.FileChooserNative.new( + self.filechooser = Gtk.FileChooserNative.new( _("Save your File"), self, Gtk.FileChooserAction.SAVE, _("Save"), _("Cancel") ) - filechooser.set_do_overwrite_confirmation(True) - filechooser.set_local_only(False) - filechooser.add_filter(filefilter) - filechooser.set_modal(True) - filechooser.set_transient_for(self) + self.filechooser.add_filter(filefilter) + self.filechooser.set_modal(True) + self.filechooser.set_transient_for(self) title = self.current.title if not title.endswith(".md"): title += ".md" - filechooser.set_current_name(title) - - response = filechooser.run() + self.filechooser.set_current_name(title) - if response == Gtk.ResponseType.ACCEPT: + self.filechooser.connect("response", on_response) - file = filechooser.get_file() - - if not file.query_exists(): - try: - file.create(Gio.FileCreateFlags.NONE) - except GLib.GError as error: - helpers.show_error(self, str(error.message)) - LOGGER.warning(str(error.message)) - return False - - self.current.gfile = file - - recents_manager = Gtk.RecentManager.get_default() - recents_manager.add_item(self.current.gfile.get_uri()) - - self.update_headerbar_title(False, True) - filechooser.destroy() - return self.save_document() - else: - return False + self.filechooser.show() def _replace_contents_cb(self, gfile, result, _user_data=None): try: success, _etag = gfile.replace_contents_finish(result) except GLib.GError as error: - helpers.show_error(self, str(error.message)) LOGGER.warning(str(error.message)) - self.progressbar_opacity_tw.start() self.did_change = True + self.progressbar_fade_out.play() + helpers.show_error(self, str(error.message)) return False if success: - self.progressbar_initiate_tw.stop() - self.progressbar_finalize_tw.start() - self.progressbar_opacity_tw.start() + if self.progressbar_animation.get_state() == Adw.AnimationState.PAUSED: + self.progressbar_animation.resume() self.update_headerbar_title() self.did_change = False else: + self.progressbar_fade_out.play() self.did_change = True - self.progressbar_opacity_tw.start() return success @@ -392,7 +422,7 @@ class MainWindow(Handy.ApplicationWindow): """Copies only html without headers etc. to Clipboard """ - output = helpers.pandoc_convert(self.text_view.get_text()) + output = helpers.pandoc_convert(self.textview.get_text()) clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) clipboard.set_text(output, -1) clipboard.store() @@ -400,11 +430,11 @@ class MainWindow(Handy.ApplicationWindow): def open_document(self, _action, _value): """open the desired file """ + self.headerbar.open_menu.popdown() - response = self.check_change() - if (response == Gtk.ResponseType.CANCEL or - response == Gtk.ResponseType.DELETE_EVENT): - return + def on_response(dialog, response): + if response == Gtk.ResponseType.ACCEPT: + self.get_application().open([dialog.get_file()], "") markdown_filter = Gtk.FileFilter.new() markdown_filter.add_mime_type('text/markdown') @@ -415,7 +445,7 @@ class MainWindow(Handy.ApplicationWindow): plaintext_filter.add_mime_type('text/plain') plaintext_filter.set_name(_('Plain Text Files')) - filechooser = Gtk.FileChooserNative.new( + self.filechooser = Gtk.FileChooserNative.new( _("Open a .md file"), self, Gtk.FileChooserAction.OPEN, @@ -423,28 +453,23 @@ class MainWindow(Handy.ApplicationWindow): _("Cancel") ) - filechooser.set_local_only(False) - filechooser.add_filter(markdown_filter) - filechooser.add_filter(plaintext_filter) - response = filechooser.run() - if response == Gtk.ResponseType.ACCEPT: - self.load_file(filechooser.get_file()) - filechooser.destroy() + self.filechooser.set_modal(True) + self.filechooser.set_transient_for(self) - elif response == Gtk.ResponseType.CANCEL: - filechooser.destroy() + self.filechooser.add_filter(markdown_filter) + self.filechooser.add_filter(plaintext_filter) + + self.filechooser.connect("response", on_response) + self.filechooser.show() def open_from_gvariant(self, _action, gvariant): - self.load_file(Gio.File.new_for_uri(gvariant.get_string())) + self.headerbar.open_menu.popdown() + self.get_application().open([Gio.File.new_for_uri(gvariant.get_string())], "") def load_file(self, file=None): """Open File from command line or open / open recent etc.""" - LOGGER.info("trying to open %s", file.get_path()) + LOGGER.info("trying to open %s", file.get_uri()) - response = self.check_change() - if (response == Gtk.ResponseType.CANCEL or - response == Gtk.ResponseType.DELETE_EVENT): - return self.current.gfile = file self.current.gfile.load_contents_async(None, @@ -470,10 +495,10 @@ class MainWindow(Handy.ApplicationWindow): LOGGER.warning(str(error.message)) return else: - self.text_view.set_text(decoded) - start_iter = self.text_view.get_buffer().get_start_iter() + self.textview.set_text(decoded) + start_iter = self.textview.get_buffer().get_start_iter() GLib.idle_add( - lambda: self.text_view.get_buffer().place_cursor(start_iter)) + lambda: self.textview.get_buffer().place_cursor(start_iter)) ## add file to recents manager once it's fully loaded, # unless it is an internal resource @@ -485,55 +510,56 @@ class MainWindow(Handy.ApplicationWindow): self.did_change = False - def check_change(self) -> Gtk.ResponseType: + def check_change(self, + callback = None): """Show dialog to prevent loss of unsaved changes """ - if self.did_change and self.text_view.get_text(): - dialog = Gtk.MessageDialog(self, - Gtk.DialogFlags.MODAL | - Gtk.DialogFlags.DESTROY_WITH_PARENT, - Gtk.MessageType.WARNING, - Gtk.ButtonsType.NONE, - _("Save changes to document " + - "“%s” before closing?") % - self.current.title - ) - - dialog.props.secondary_text = _("If you don’t save, " + - "all your changes will be " + - "permanently lost.") - close_button = dialog.add_button(_("Close without saving"), - Gtk.ResponseType.NO) - dialog.add_button(_("Cancel"), Gtk.ResponseType.CANCEL) - dialog.add_button(_("Save now"), Gtk.ResponseType.YES) - - close_button.get_style_context().add_class("destructive-action") - dialog.set_default_response(Gtk.ResponseType.YES) - response = dialog.run() - - dialog.destroy() - - if response == Gtk.ResponseType.YES: - # If the saving fails, retry - if self.save_document(sync=True) is False: - return self.check_change() - - return response + if self.did_change: + dialog = Adw.MessageDialog.new(self, + _("Save changes?"), + _("“%s” contains unsaved changes. " + + "If you don’t save, " + + "all your changes will be " + + "permanently lost.") % self.current.title + ) + dialog.add_response("cancel", _("Cancel")) + dialog.add_response("close", _("Discard")) + dialog.add_response("save", _("Save")) + dialog.set_response_appearance("close", Adw.ResponseAppearance.DESTRUCTIVE) + dialog.set_response_appearance("save", Adw.ResponseAppearance.SUGGESTED) + dialog.set_default_response("save") + dialog.set_close_response("cancel") + + def on_response(message_dialog, response): + if response == "cancel": + return + if response == "save": + # If the saving fails, retry + if self.save_document(sync=True) is False: + return + if callback is not None: + callback(self) + + dialog.connect("response", on_response) + + dialog.present() + return + else: + if callback is not None: + callback(self) def new_document(self, *args, **kwargs): - """create new document + """create new document in the same window """ + def callback(self): + self.textview.clear() - response = self.check_change() - if (response == Gtk.ResponseType.CANCEL or - response == Gtk.ResponseType.DELETE_EVENT): - return - self.text_view.clear() + self.did_change = False + self.current.gfile = None + self.update_headerbar_title(False, False) - self.did_change = False - self.current.gfile = None - self.update_headerbar_title(False, False) + self.check_change(callback) def update_default_stat(self): self.stats_handler.update_default_stat() @@ -544,7 +570,7 @@ class MainWindow(Handy.ApplicationWindow): def open_export(self, _action, value): """open the export dialog """ - text = bytes(self.text_view.get_text(), "utf-8") + text = bytes(self.textview.get_text(), "utf-8") export_format = value.get_string() @@ -561,47 +587,49 @@ class MainWindow(Handy.ApplicationWindow): export_dialog.set_transient_for(self) export_dialog.show() + def show_hemingway_toast(self, *args): + if self.textview.hemingway_mode: + # Only show the first three times + count = self.settings.get_int("hemingway-toast-count") + if count >= 3: + return + count += 1 + self.settings.set_int("hemingway-toast-count", count) + + self.toast_overlay.add_toast(self.hemingway_toast) + + def show_hemingway_help(self, *args): + hemingway_dialog = Gtk.Builder.new_from_resource("/org/gnome/gitlab/somas/Apostrophe/ui/AboutHemingway.ui")\ + .get_object("dialog") + hemingway_dialog.set_transient_for(self) + hemingway_dialog.present() + @Gtk.Template.Callback() - def reveal_headerbar_bottombar(self, _widget=None, _data=None): + def reveal_headerbar_bottombar(self, *args): self.reveal_bottombar() - if not self.headerbar_visible: - self.headerbar_eventbox.hide() - self.headerbar.set_visible(True) + if not self.headerbar.get_reveal_child(): self.headerbar.set_reveal_child(True) - self.get_style_context().remove_class("focus") - self.headerbar_visible = True @Gtk.Template.Callback() - def reveal_bottombar(self, _widget=None, _data=None): - - if not self.bottombar_visible: + def reveal_bottombar(self, *args): + if not self.stats_revealer.get_reveal_child(): self.stats_revealer.set_reveal_child(True) self.stats_revealer.set_halign(Gtk.Align.END) self.stats_revealer.queue_resize() - self.bottombar_visible = True - def hide_headerbar_bottombar(self): - - if self.searchbar.get_search_mode(): + if self.searchbar.search_mode_enabled: return - if self.headerbar_visible: + if self.headerbar.get_reveal_child(): self.headerbar.set_reveal_child(False) - self.get_style_context().add_class("focus") - - self.headerbar_visible = False - if self.bottombar_visible: + if self.stats_revealer.get_reveal_child(): self.stats_revealer.set_reveal_child(False) self.stats_revealer.set_halign(Gtk.Align.FILL) - self.bottombar_visible = False - - self.headerbar_eventbox.show() - # TODO: this has to go def update_headerbar_title(self, is_unsaved: bool = False, @@ -631,24 +659,27 @@ class MainWindow(Handy.ApplicationWindow): def save_state(self): self.settings.set_enum("preview-mode", self.preview_layout) self.settings.set_boolean("preview-active", self.preview) - self.settings.set_boolean("hemingway-mode", self.text_view.hemingway_mode) + self.settings.set_boolean("hemingway-mode", self.textview.hemingway_mode) - @Gtk.Template.Callback() - def on_delete_called(self, _widget, _data=None): - """Called when the ApostropheWindow is closed. - """ - LOGGER.info('delete called') - response = self.check_change() - if (response == Gtk.ResponseType.CANCEL or - response == Gtk.ResponseType.DELETE_EVENT): - return True - - # save state if we're the last window OR if only the preview window is left - n_windows = len(self.get_application().get_windows()) - if n_windows == 1 or \ - (n_windows == 2 and self.preview_handler.preview_renderer.window): - self.save_state() - return False + def do_close_request(self, *args): + LOGGER.info('close request called') + + if self.close_anyway: + self.get_application().windows.remove(self.get_group()) + self.destroy() + return False + + # called if check_change decides we can throw away the contents of the textview + def callback(window): + # save state if we're the last window group left + n_windows = len(window.get_application().windows) + if n_windows == 1: + window.save_state() + window.close_anyway = True + window.do_close_request() + + self.check_change(callback) + return True @dataclass class File(): @@ -659,7 +690,7 @@ class File(): self.gfile = gfile self.encoding = encoding self.path = "" - self.title = "" + self.title = _("New File") self.name = "" @property diff --git a/apostrophe/open_popover.py b/apostrophe/open_popover.py index 1329718..bcba640 100644 --- a/apostrophe/open_popover.py +++ b/apostrophe/open_popover.py @@ -15,15 +15,17 @@ """Open/recents popover """ +from gettext import gettext as _ from os import close + import gi -from gettext import gettext as _ +gi.require_version('Gtk', '4.0') +from gi.repository import Adw, Gio, GLib, GObject, Gtk -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, Gio, GLib, GObject, Handy from .settings import Settings + class RecentItem(GObject.Object): def __init__(self, name, path, uri, **kwargs): super().__init__(**kwargs) @@ -57,19 +59,18 @@ class ApostropheOpenPopover(Gtk.Popover): self.recents_manager.connect("changed", self.on_manager_changed) def create_row(self, item, **args): - row = Handy.ActionRow.new() + row = Adw.ActionRow.new() row.item = item row.set_title(item.name) row.set_subtitle(item.path) - delete_button = Gtk.Button.new_from_icon_name("window-close-symbolic", Gtk.IconSize.BUTTON) + delete_button = Gtk.Button.new_from_icon_name("window-close-symbolic") delete_button.get_style_context().add_class("flat") delete_button.get_style_context().add_class("circular") delete_button.set_valign(Gtk.Align.CENTER) - delete_button.set_visible(True) delete_button.connect("clicked", self.on_delete_click, item) - row.add(delete_button) + row.add_suffix(delete_button) row.set_activatable(True) row.set_action_name("win.open_file") row.set_action_target_value(GLib.Variant.new_string(item.uri)) @@ -102,4 +103,4 @@ class ApostropheOpenPopover(Gtk.Popover): print("stop") def on_delete_click(self, _widget, item): - self.recents_manager.remove_item(item.uri) \ No newline at end of file + self.recents_manager.remove_item(item.uri) diff --git a/apostrophe/preferences_dialog.py b/apostrophe/preferences_dialog.py index 4161a6a..52c9e66 100644 --- a/apostrophe/preferences_dialog.py +++ b/apostrophe/preferences_dialog.py @@ -19,7 +19,7 @@ import webbrowser import gi -gi.require_version('Gtk', '3.0') +gi.require_version('Gtk', '4.0') from gi.repository import Gtk, Handy, Gio, GObject import logging logger = logging.getLogger('apostrophe') diff --git a/apostrophe/preview_layout_switcher.py b/apostrophe/preview_layout_switcher.py index 00c5756..fdd48a3 100644 --- a/apostrophe/preview_layout_switcher.py +++ b/apostrophe/preview_layout_switcher.py @@ -15,14 +15,16 @@ # with this program. If not, see . # END LICENSE -from apostrophe.settings import Settings -from gi.repository import Gtk, GObject -from enum import IntEnum import enum - +from enum import IntEnum from gettext import gettext as _ + import gi -gi.require_version('Gtk', '3.0') +from gi.repository import GObject, Gtk + +from apostrophe.settings import Settings + +gi.require_version('Gtk', '4.0') class PreviewLayout(IntEnum): @@ -70,7 +72,7 @@ class PreviewLayoutSwitcherItem(Gtk.ListBoxRow): def __init__(self, _layout): super().__init__() self.layout = _layout - self.icon.set_from_icon_name(self.layout.get_icon(), 4) + self.icon.set_from_icon_name(self.layout.get_icon()) self.title.set_label(self.layout.get_text()) self.connect("notify::selected", self.on_selected) @@ -97,7 +99,7 @@ class PreviewLayoutSwitcher(Gtk.Box): for i, layout in enumerate(PreviewLayout): item = PreviewLayoutSwitcherItem(layout) - self.list_box.add(item) + self.list_box.append(item) self.items.append(item) self.update_ui() @@ -105,7 +107,7 @@ class PreviewLayoutSwitcher(Gtk.Box): @Gtk.Template.Callback() def update_ui(self, *args, **kwargs): - self.layout_image.set_from_icon_name(PreviewLayout(self.preview_layout).get_icon(), 4) + self.layout_image.set_from_icon_name(PreviewLayout(self.preview_layout).get_icon()) for item in self.items: item.selected = item.layout == self.preview_layout @@ -117,8 +119,3 @@ class PreviewLayoutSwitcher(Gtk.Box): def on_row_activated(self, _listbox, row): self.preview_layout = row.layout self.layout_popover.popdown() - - # TODO: remove - @Gtk.Template.Callback() - def on_menu_state_changed(self, _listbox, row): - pass diff --git a/apostrophe/preview_window.py b/apostrophe/preview_window.py index 0b8c435..f8df0c8 100644 --- a/apostrophe/preview_window.py +++ b/apostrophe/preview_window.py @@ -14,7 +14,7 @@ import gi -gi.require_version('Gtk', '3.0') +gi.require_version('Gtk', '4.0') from gi.repository import Gtk, Gdk, GObject, GLib, Gio, Handy diff --git a/apostrophe/search_and_replace.py b/apostrophe/search_and_replace.py index 2ddac07..a94ac86 100644 --- a/apostrophe/search_and_replace.py +++ b/apostrophe/search_and_replace.py @@ -20,14 +20,13 @@ import gi from apostrophe.helpers import user_action -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, GObject - +gi.require_version('Gtk', '4.0') +from gi.repository import Adw, GObject, Gtk LOGGER = logging.getLogger('apostrophe') @Gtk.Template(resource_path='/org/gnome/gitlab/somas/Apostrophe/ui/SearchBar.ui') -class ApostropheSearchBar(Gtk.SearchBar): +class ApostropheSearchBar(Adw.Bin): """ Adds (regex) search and replace functionality to apostrophe @@ -35,27 +34,34 @@ class ApostropheSearchBar(Gtk.SearchBar): __gtype_name__ = "ApostropheSearchBar" replace_mode_enabled = GObject.property(type=bool, default=False) + search_mode_enabled = GObject.property(type=bool, default=False) + searchbar = Gtk.Template.Child() search_entry = Gtk.Template.Child() regex = Gtk.Template.Child() case_sensitive = Gtk.Template.Child() replace_entry = Gtk.Template.Child() def __init__(self): - self.textbuffer = None self.matches = [] self.active = 0 + # contruct a paintable to check size changes + self.paintable = Gtk.WidgetPaintable.new(self) + self.paintable.connect("invalidate-size", self.update_textview_margin) + + self.connect("notify::search-mode-enabled", self.search_enabled) + self.connect("notify::replace-mode-enabled", self.replace_enabled) + def attach(self, textview): self.textview = textview - self.textbuffer = textview.get_buffer() + self.textbuffer = self.textview.get_buffer() self.highlight = self.textbuffer.create_tag('search_highlight', background="yellow") - @Gtk.Template.Callback() - def search_enabled(self, _widget, _data): - if self.get_search_mode(): + def search_enabled(self, *args, **kwargs): + if self.searchbar.get_search_mode(): self.textbuffer = self.textview.get_buffer() if self.textbuffer.get_has_selection(): self.search_entry.set_text(self.textbuffer.get_slice(*self.textbuffer.get_selection_bounds(), False)) @@ -66,12 +72,12 @@ class ApostropheSearchBar(Gtk.SearchBar): self.textbuffer.get_start_iter(), self.textbuffer.get_end_iter()) self.matches = [] + self.replace_mode_enabled = False self.textview.grab_focus() - @Gtk.Template.Callback() def replace_enabled(self, _widget, _data): - if not self.get_search_mode(): - self.set_search_mode(True) + if self.replace_mode_enabled and not self.search_mode_enabled: + self.search_mode_enabled = True @Gtk.Template.Callback() def search(self, _widget=None, _data=None, scroll=True): @@ -126,7 +132,7 @@ class ApostropheSearchBar(Gtk.SearchBar): # create a mark at the start of the coincidence to scroll to it mark = self.textbuffer.create_mark(None, start_iter, False) - self.textview.scroller.scroll_to_mark(mark, center=True) + self.textview.scroller.smooth_scroll_to_mark(mark, center=True) # select coincidence self.textbuffer.select_range(start_iter, end_iter) @@ -163,6 +169,5 @@ class ApostropheSearchBar(Gtk.SearchBar): # Since the searchbar is overlayed to the textview we need to # update its margin when the searchbar appears - @Gtk.Template.Callback() - def update_textview_margin(self, _widget, allocation): - self.textview.update_vertical_margin(allocation.height) \ No newline at end of file + def update_textview_margin(self, paintable): + self.textview.update_vertical_margin(self.paintable.get_intrinsic_height()) diff --git a/apostrophe/stats_handler.py b/apostrophe/stats_handler.py index cc7dbbe..99c37dc 100644 --- a/apostrophe/stats_handler.py +++ b/apostrophe/stats_handler.py @@ -1,7 +1,7 @@ from gettext import gettext as _ from gettext import ngettext -from gi.repository import GLib, Gio, Gtk +from gi.repository import Gio, GLib, Gtk from apostrophe.settings import Settings from apostrophe.stats_counter import StatsCounter @@ -22,13 +22,14 @@ class StatsHandler: super().__init__() self.stats_button = stats_button - self.stats_button.connect("clicked", self.on_stats_button_clicked) + self.stats_button.connect("destroy", self.on_destroy) self.text_view = text_view self.text_view.get_buffer().connect("changed", self.on_text_changed) - - self.popover = None + # we don't have a better way to check when a selection changes size + # so we listen to the cursor position and then check if there's a selection + self.text_view.get_buffer().connect("notify::cursor-position", self.on_text_selected) self.characters = 0 self.words = 0 @@ -36,15 +37,31 @@ class StatsHandler: self.paragraphs = 0 self.read_time = (0, 0, 0) + self.selected_characters = 0 + self.selected_words = 0 + self.selected_sentences = 0 + self.selected_paragraphs = 0 + self.selected_read_time = (0, 0, 0) + self.settings = Settings.new() self.stats_counter = StatsCounter(self.update_stats) + self.selected_stats_counter = StatsCounter(self.update_selection_stats) + + self.popover = Gtk.PopoverMenu.new_from_model(Gio.Menu()) + self.popover.set_halign(Gtk.Align.END) + self.popover.set_margin_end(6) + self.popover.set_margin_bottom(6) + self.popover.set_has_arrow(False) + self.stats_button.set_popover(self.popover) + self.popover.connect('closed', self.on_popover_closed) - self.update_default_stat() + self.stats_button.set_direction(Gtk.ArrowType.UP) + self.stats_button.set_create_popup_func(self.on_stats_button_clicked) - def on_stats_button_clicked(self, _button): - self.stats_button.set_state_flags(Gtk.StateFlags.CHECKED, False) + self.update_default_stat() + def on_stats_button_clicked(self, *args, **kwargs): menu = Gio.Menu() stats = self.settings.props.settings_schema.get_key( "stat-default").get_range()[1] @@ -53,14 +70,10 @@ class StatsHandler: menu_item.set_action_and_target_value( "app.stat_default", GLib.Variant.new_string(stat)) menu.append_item(menu_item) - self.popover = Gtk.Popover.new_from_model(self.stats_button, menu) - self.popover.connect('closed', self.on_popover_closed) - self.popover.popup() - def on_popover_closed(self, _popover): - self.stats_button.unset_state_flags(Gtk.StateFlags.CHECKED) + self.popover.set_menu_model(menu) - self.popover = None + def on_popover_closed(self, _popover): self.text_view.grab_focus() def on_text_changed(self, buf): @@ -70,27 +83,48 @@ class StatsHandler: buf.get_end_iter(), False)) + def on_text_selected(self, buf, *args): + if buf.get_has_selection(): + (start, end) = buf.get_selection_bounds() + self.selected_stats_counter.count( + buf.get_text( + start, + end, + False)) + def get_text_for_stat(self, stat): if stat == self.CHARACTERS: - return ngettext("{:n} Character", "{:n} Characters", self.characters).format(self.characters) + selection_string = _("{:n} of ").format(self.selected_characters) if self.text_view.get_buffer().get_has_selection() else "" + return selection_string + ngettext("{:n} Character", "{:n} Characters", self.characters).format(self.characters) elif stat == self.WORDS: - return ngettext("{:n} Word", "{:n} Words", self.words).format(self.words) + selection_string = _("{:n} of ").format(self.selected_words) if self.text_view.get_buffer().get_has_selection() else "" + return selection_string + ngettext("{:n} Word", "{:n} Words", self.words).format(self.words) elif stat == self.SENTENCES: - return ngettext("{:n} Sentence", "{:n} Sentences", self.sentences).format(self.sentences) + selection_string = _("{:n} of ").format(self.selected_sentences) if self.text_view.get_buffer().get_has_selection() else "" + return selection_string + ngettext("{:n} Sentence", "{:n} Sentences", self.sentences).format(self.sentences) elif stat == self.PARAGRAPHS: - return ngettext("{:n} Paragraph", "{:n} Paragraphs", self.paragraphs).format(self.paragraphs) + selection_string = _("{:n} of ").format(self.selected_paragraphs) if self.text_view.get_buffer().get_has_selection() else "" + return selection_string + ngettext("{:n} Paragraph", "{:n} Paragraphs", self.paragraphs).format(self.paragraphs) elif stat == self.READ_TIME: - return _("{:d}:{:02d}:{:02d} Read Time").format(*self.read_time) + selection_string = _("{:d}:{:02d}:{:02d} of ").format(*self.selected_read_time) if self.text_view.get_buffer().get_has_selection() else "" + return selection_string + _("{:d}:{:02d}:{:02d} Read Time").format(*self.read_time) else: raise ValueError("Unknown stat {}".format(stat)) def update_stats(self, stats): - (characters, words, sentences, paragraphs, read_time) = stats - self.characters = characters - self.words = words - self.sentences = sentences - self.paragraphs = paragraphs - self.read_time = read_time + (self.characters, + self.words, + self.sentences, + self.paragraphs, + self.read_time) = stats + self.update_default_stat(False) + + def update_selection_stats(self, stats): + (self.selected_characters, + self.selected_words, + self.selected_sentences, + self.selected_paragraphs, + self.selected_read_time) = stats self.update_default_stat(False) def update_default_stat(self, close_popover=True): @@ -102,3 +136,4 @@ class StatsHandler: def on_destroy(self, _widget): self.stats_counter.stop() + self.selected_stats_counter.stop() diff --git a/apostrophe/text_view.py b/apostrophe/text_view.py index 6ddfa90..9fae97d 100644 --- a/apostrophe/text_view.py +++ b/apostrophe/text_view.py @@ -13,23 +13,28 @@ # with this program. If not, see . # END LICENSE +import collections +import mimetypes +import urllib +from datetime import datetime +from gettext import gettext as _ +from os.path import basename + import gi from apostrophe.helpers import user_action from apostrophe.inline_preview import InlinePreview -from apostrophe.text_view_drag_drop_handler import DragDropHandler,\ - TARGET_URI, TARGET_TEXT +from apostrophe.settings import Settings from apostrophe.text_view_format_inserter import FormatInserter from apostrophe.text_view_markup_handler import MarkupHandler from apostrophe.text_view_scroller import TextViewScroller -from apostrophe.text_view_undo_redo_handler import UndoRedoHandler -gi.require_version('Gtk', '3.0') +gi.require_version('Gtk', '4.0') gi.require_version('Gspell', '1') -from gi.repository import Gtk, Gdk, GObject, GLib, Gspell - import logging +from gi.repository import Adw, Gdk, Gio, GLib, GObject, Gtk + LOGGER = logging.getLogger('apostrophe') DEFAULT_DPI = 98304 @@ -43,7 +48,7 @@ class ApostropheTextView(Gtk.TextView): - Format shortcuts (via TextBufferShortcutInserter) - Markup (via TextBufferMarkupHandler) - Preview popover (via TextBufferMarkupHandler) - - Drag and drop (via TextViewDragDropHandler) + - Drag and drop - Scrolling (via TextViewScroller) - The various modes supported by Apostrophe (e. Focus Mode, Hemingway Mode) """ @@ -57,12 +62,9 @@ class ApostropheTextView(Gtk.TextView): 'insert-listitem': (GObject.SignalFlags.ACTION, None, ()), 'insert-header': (GObject.SignalFlags.ACTION, None, ()), 'insert-strikethrough': (GObject.SignalFlags.ACTION, None, ()), - 'undo': (GObject.SignalFlags.ACTION, None, ()), - 'redo': (GObject.SignalFlags.ACTION, None, ()), 'scroll-scale-changed': (GObject.SIGNAL_RUN_LAST, None, (float,)), } - bigger_text = GObject.Property(type=bool, default=False) hemingway_mode = GObject.Property(type=bool, default=False) focus_mode = GObject.Property(type=bool, default=False) @@ -74,6 +76,8 @@ class ApostropheTextView(Gtk.TextView): _scroll_scale = 0 + hemingway_attempts = collections.deque(4*[datetime.min], 4) + @GObject.Property(type=float, default=0) def scroll_scale(self): return self.scroller.get_scroll_scale() if self.scroller else 0 @@ -83,25 +87,15 @@ class ApostropheTextView(Gtk.TextView): if self.scroller: self.scroller.set_scroll_scale(scale) + gesture_controller = Gtk.Template.Child() + def __init__(self): super().__init__() + self.settings = Settings.new() # Spell checking - self.gspell_view = Gspell.TextView.get_from_gtk_text_view(self) - self.gspell_view.basic_setup() - - # Undo / redo - self.undo_redo = UndoRedoHandler() - self.get_buffer().connect('begin-user-action', - self.undo_redo.on_begin_user_action) - self.get_buffer().connect('end-user-action', - self.undo_redo.on_end_user_action) - self.get_buffer().connect('insert-text', - self.undo_redo.on_insert_text) - self.get_buffer().connect('delete-range', - self.undo_redo.on_delete_range) - self.connect('undo', self.undo_redo.undo) - self.connect('redo', self.undo_redo.redo) + # self.gspell_view = Gspell.TextView.get_from_gtk_text_view(self) + # self.gspell_view.basic_setup() # Format shortcuts self.shortcut = FormatInserter() @@ -114,14 +108,15 @@ class ApostropheTextView(Gtk.TextView): # Markup self.markup = MarkupHandler(self) - self.connect('style-updated', self.markup.on_style_updated) self.connect('destroy', self.markup.stop) # Preview popover - self.preview_popover = InlinePreview(self) + # self.preview_popover = InlinePreview(self) # Drag and drop - self.drag_drop = DragDropHandler(self, TARGET_URI, TARGET_TEXT) + drop_target = Gtk.DropTarget.new(GObject.TYPE_STRING, Gdk.DragAction.COPY) + drop_target.connect('drop', self.on_drop) + self.add_controller(drop_target) # While resizing the TextView, there is unwanted scroll upwards # if a top margin is present. @@ -131,6 +126,73 @@ class ApostropheTextView(Gtk.TextView): # TODO: Find a better way to handle unwanted scroll. self.frozen_scroll_scale = None + self.update_vertical_margin() + + def on_drop(self, drop_target, content, _x, _y): + # check if a file was dropped + try: + GLib.Uri.is_valid(content, GLib.UriFlags.NONE) + uri = GLib.Uri.parse(content, GLib.UriFlags.NONE) + + # we could try to use glib utils for handling uris but it's not that + # worth it + + if content.startswith("file://"): + # remove trailing newlines + content = content.strip() + + name = basename(urllib.parse.unquote_plus(content)) + mime = Gio.content_type_guess(content) + + # stripe "file://" + content = content[7:] + + if mime[0] is not None and mime[0].startswith('image/'): + basepath = self.settings.get_string("open-file-path") + basepath = urllib.parse.quote(basepath) + + + # for handling local URIs we need to substract the basepath + # except when it is "/" (document not saved) + # TODO: use g_uri_resolve_relative + if content.startswith(basepath) and basepath != "/": + content = content[len(basepath) + 1:] + + content = "![{}]({})".format(name, content) + limit_left = 2 + limit_right = len(name) + else: + content = "[{}]({})".format(name, content) + limit_left = 1 + limit_right = len(name) + elif content.startswith(("https", "http")): + content = "[{}]({})".format(_("web page"), content) + limit_left = 1 + limit_right = len(_("web page")) + # otherwise we just received text + except Exception as e: + # delete automatically added DnD text + insert_mark = self.get_buffer().get_insert() + cursor_iter_r = self.get_buffer().get_iter_at_mark(insert_mark) + cursor_iter_l = cursor_iter_r.copy() + cursor_iter_l.backward_chars(len(content)) + + self.get_buffer().delete(cursor_iter_l, cursor_iter_r) + + limit_left = 0 + limit_right = 0 + + self.get_buffer().place_cursor(self.get_buffer().get_iter_at_mark( + self.get_buffer().get_mark('gtk_drag_target'))) + self.get_buffer().insert_at_cursor(content) + insert_mark = self.get_buffer().get_insert() + selection_bound = self.get_buffer().get_selection_bound() + cursor_iter = self.get_buffer().get_iter_at_mark(insert_mark) + cursor_iter.backward_chars(len(content) - limit_left) + self.get_buffer().move_mark(insert_mark, cursor_iter) + cursor_iter.forward_chars(limit_right) + self.get_buffer().move_mark(selection_bound, cursor_iter) + def get_text(self): text_buffer = self.get_buffer() start_iter = text_buffer.get_start_iter() @@ -141,23 +203,20 @@ class ApostropheTextView(Gtk.TextView): """Set text and clear undo history""" text_buffer = self.get_buffer() + text_buffer.begin_irreversible_action() with user_action(text_buffer): text_buffer.set_text(text) - self.undo_redo.clear() + text_buffer.end_irreversible_action() def update_vertical_margin(self, top_margin=0): if self.focus_mode: height = self.get_allocation().height + top_margin - # The height/6 may seem strange. It's a workaround for a GTK bug - # If a top-margin is larger than a certain amount of - # the TextView height, jumps may occur when pressing enter. - # TODO: check again in GTK4 - self.set_top_margin(height / 2 + top_margin - height/6) + self.set_top_margin(height / 2 + top_margin) self.set_bottom_margin(height / 2) else: - self.props.top_margin = 80 + top_margin - self.props.bottom_margin = 64 + self.set_top_margin(80 + top_margin) + self.set_bottom_margin(64) def clear(self): """Clear text and undo history""" @@ -177,9 +236,10 @@ class ApostropheTextView(Gtk.TextView): mark, self.focus_mode) @Gtk.Template.Callback() - def _on_button_release_event(self, _widget, _event): + def _on_button_release_event(self, *args, **kwargs): if self.focus_mode: self.markup.apply() + self.smooth_scroll_to() return False @Gtk.Template.Callback() @@ -191,18 +251,34 @@ class ApostropheTextView(Gtk.TextView): self.grab_focus() @Gtk.Template.Callback() - def _on_key_press_event(self, _widget, event): + def _on_key_press_event(self, _controller, keyval, _keycode, state): if self.hemingway_mode: - return event.keyval == Gdk.KEY_BackSpace or event.keyval == Gdk.KEY_Delete - - if event.state & Gdk.ModifierType.SHIFT_MASK == Gdk.ModifierType.SHIFT_MASK \ - and event.keyval == Gdk.KEY_ISO_Left_Tab: # Capure Shift-Tab + if keyval == Gdk.KEY_BackSpace or keyval == Gdk.KEY_Delete or self.get_buffer().get_has_selection(): + # log the time into a list with max length of 4 + # then check if the time differences are small enough + # to show the help popover again + self.hemingway_attempts.appendleft(datetime.now()) + if (self.hemingway_attempts[0] - self.hemingway_attempts[3]).seconds <= 70: + self.settings.set_int("hemingway-toast-count", 0) + self.activate_action("win.show_hemingway_toast") + + spring_params = Adw.SpringParams.new(0.5, 0.5, 1000) + target = Adw.PropertyAnimationTarget.new(self, "left-margin") + hemingway_animation = Adw.SpringAnimation.new(self, self.get_left_margin(), self.get_left_margin(), spring_params, target) + hemingway_animation.set_initial_velocity(10) + hemingway_animation.play() + + return True + + if state == Gdk.ModifierType.SHIFT_MASK and keyval == Gdk.KEY_ISO_Left_Tab: # Capure Shift-Tab self._on_shift_tab() return True @Gtk.Template.Callback() def _on_mark_set(self, _text_buffer, _location, mark, _data=None): - if mark.get_name() == 'selection_bound': + # only scroll if the cursor was moved by keyboard. + # otherwise check _on_button_release_event + if mark.get_name() == 'selection_bound' and not self.gesture_controller.is_active(): self.markup.apply() if not self.get_buffer().get_has_selection(): self.smooth_scroll_to(mark) @@ -210,20 +286,6 @@ class ApostropheTextView(Gtk.TextView): self.smooth_scroll_to(mark) return True - # TODO: this seems a little backwards way to hook things up - @Gtk.Template.Callback() - def _on_parent_set(self, *_): - parent = self.get_parent() - if parent: - parent.set_size_request(self.get_min_width(), 500) - self.scroller = TextViewScroller(self, parent) - parent.get_vadjustment().connect("changed", - self._on_vadjustment_changed) - parent.get_vadjustment().connect("value-changed", - self._on_vadjustment_changed) - else: - self.scroller = None - @Gtk.Template.Callback() def _on_paste_done(self, *_): self.smooth_scroll_to() @@ -239,7 +301,6 @@ class ApostropheTextView(Gtk.TextView): with user_action(text_buffer): text_buffer.delete(pen_iter, end_iter) - @Gtk.Template.Callback() def _on_size_allocate(self, *_): self._update_horizontal_margin() self.markup.update_margins_indents() @@ -277,10 +338,9 @@ class ApostropheTextView(Gtk.TextView): if width >= self.get_min_width(font_size): if font_size != self.font_size: self.font_size = font_size - style_ctxt = self.get_style_context() - for size_class in filter(lambda style_class: style_class.startswith("size"), style_ctxt.list_classes()): - style_ctxt.remove_class(size_class) - style_ctxt.add_class("size{}".format(font_size)) + for size_class in filter(lambda style_class: style_class.startswith("size"), self.get_css_classes()): + self.remove_css_class(size_class) + self.add_css_class("size{}".format(font_size)) break else: return @@ -289,8 +349,8 @@ class ApostropheTextView(Gtk.TextView): line_width = (self.line_chars + 1) *\ int(self._get_char_width(self.font_size)) - 1 horizontal_margin = (width - line_width) / 2 - self.props.left_margin = horizontal_margin - self.props.right_margin = horizontal_margin + self.set_left_margin(horizontal_margin) + self.set_right_margin(horizontal_margin) def _get_font_sizes(self): font_sizes_list = [20, 18, 17, 16, 15, 14] @@ -330,3 +390,23 @@ class ApostropheTextView(Gtk.TextView): scale_factor = settings.props.gtk_xft_dpi / DEFAULT_DPI return scale_factor * font_size * 1 / 1.6 + + def do_size_allocate(self, width, height, baseline): + Gtk.TextView.do_size_allocate(self,width, height, baseline) + self._on_size_allocate() + + + # TODO: refactor TextViewScroller + def do_map(self, *args, **kwargs): + Gtk.TextView.do_map(self) + + parent = self.get_parent() + if parent: + parent.set_size_request(self.get_min_width(), 500) + self.scroller = TextViewScroller(self, parent) + parent.get_vadjustment().connect("changed", + self._on_vadjustment_changed) + parent.get_vadjustment().connect("value-changed", + self._on_vadjustment_changed) + else: + self.scroller = None diff --git a/apostrophe/text_view_drag_drop_handler.py b/apostrophe/text_view_drag_drop_handler.py deleted file mode 100644 index 77a390d..0000000 --- a/apostrophe/text_view_drag_drop_handler.py +++ /dev/null @@ -1,95 +0,0 @@ -import mimetypes -import urllib -from gettext import gettext as _ -from os.path import basename -from apostrophe.settings import Settings - -from gi.repository import Gtk - -(TARGET_URI, TARGET_TEXT) = range(2) - - -class DragDropHandler: - TARGET_URI = None - - def __init__(self, text_view, *targets): - super().__init__() - - self.settings = Settings.new() - - self.target_list = Gtk.TargetList.new([]) - if TARGET_URI in targets: - self.target_list.add_uri_targets(TARGET_URI) - if TARGET_TEXT in targets: - self.target_list.add_text_targets(TARGET_TEXT) - - text_view.drag_dest_set_target_list(self.target_list) - text_view.connect_after( - 'drag-data-received', - self.on_drag_data_received) - - def on_drag_data_received( - self, text_view, drag_context, _x, _y, data, info, time): - """Handle drag and drop events""" - - text_buffer = text_view.get_buffer() - - if info == TARGET_URI: - uris = data.get_uris() - for uri in uris: - name = basename(urllib.parse.unquote_plus(uri)) - mime = mimetypes.guess_type(uri) - - if mime[0] is not None and mime[0].startswith('image/'): - basepath = self.settings.get_string("open-file-path") - basepath = urllib.parse.quote(basepath) - - if uri.startswith("file://"): - uri = uri[7:] - - # for handling local URIs we need to substract the basepath - # except when it is "/" (document not saved) - if uri.startswith(basepath) and basepath != "/": - uri = uri[len(basepath) + 1:] - - text = "![{}]({})".format(name, uri) - limit_left = 2 - limit_right = len(name) - else: - text = "[{}]({})".format(name, uri) - limit_left = 1 - limit_right = len(name) - - elif info == TARGET_TEXT: - text = data.get_text() - - # delete automatically added DnD text - insert_mark = text_buffer.get_insert() - cursor_iter_r = text_buffer.get_iter_at_mark(insert_mark) - cursor_iter_l = cursor_iter_r.copy() - cursor_iter_l.backward_chars(len(data.get_text())) - - text_buffer.delete(cursor_iter_l, cursor_iter_r) - - if text.startswith(("http://", "https://", "www.")): - text = "[{}]({})".format(_("web page"), text) - limit_left = 1 - limit_right = len(_("web page")) - else: - limit_left = 0 - limit_right = 0 - - text_buffer.place_cursor(text_buffer.get_iter_at_mark( - text_buffer.get_mark('gtk_drag_target'))) - text_buffer.insert_at_cursor(text) - insert_mark = text_buffer.get_insert() - selection_bound = text_buffer.get_selection_bound() - cursor_iter = text_buffer.get_iter_at_mark(insert_mark) - cursor_iter.backward_chars(len(text) - limit_left) - text_buffer.move_mark(insert_mark, cursor_iter) - cursor_iter.forward_chars(limit_right) - text_buffer.move_mark(selection_bound, cursor_iter) - - Gtk.drag_finish(drag_context, True, True, time) - text_view.get_toplevel().present_with_time(time) - return False diff --git a/apostrophe/text_view_markup_handler.py b/apostrophe/text_view_markup_handler.py index 8ab2c6b..c246435 100644 --- a/apostrophe/text_view_markup_handler.py +++ b/apostrophe/text_view_markup_handler.py @@ -13,20 +13,20 @@ # with this program. If not, see . # END LICENSE -from gi.repository import Pango -from gi.repository import Gtk, GLib import re from multiprocessing import Pipe, Process import gi +from gi.repository import GLib, Gtk, Pango from apostrophe import helpers, markup_regex -from apostrophe.markup_regex import STRIKETHROUGH, BOLD_ITALIC,\ - BOLD, ITALIC_ASTERISK, ITALIC_UNDERSCORE, IMAGE, LINK, LINK_ALT,\ - HORIZONTAL_RULE, LIST, ORDERED_LIST, BLOCK_QUOTE, HEADER, HEADER_UNDER,\ - TABLE, MATH, CODE +from apostrophe.markup_regex import (BLOCK_QUOTE, BOLD, BOLD_ITALIC, CODE, + HEADER, HEADER_UNDER, HORIZONTAL_RULE, + IMAGE, ITALIC_ASTERISK, ITALIC_UNDERSCORE, + LINK, LINK_ALT, LIST, MATH, ORDERED_LIST, + STRIKETHROUGH, TABLE) -gi.require_version('Gtk', '3.0') +gi.require_version('Gtk', '4.0') class MarkupHandler: @@ -43,9 +43,9 @@ class MarkupHandler: TAG_NAME_UNFOCUSED_TEXT = 'unfocused_text' TAG_NAME_MARGIN_INDENT = 'margin_indent' - def __init__(self, text_view): - self.text_view = text_view - self.text_buffer = text_view.get_buffer() + def __init__(self, textview): + self.textview = textview + self.text_buffer = self.textview.get_buffer() self.marked_up_text = None # Tags. @@ -140,7 +140,7 @@ class MarkupHandler: self.on_parsed) def on_style_updated(self, *_): - style_context = self.text_view.get_style_context() + style_context = self.textview.get_style_context() (found, color) = style_context.lookup_color('code_bg_color') if not found: (_, color) = style_context.lookup_color('background_color') @@ -352,7 +352,7 @@ class MarkupHandler: # Apply focus mode tag (grey out before/after current sentence). buffer.remove_tag(self.tag_unfocused_text, start, end) - if self.text_view.focus_mode: + if self.textview.focus_mode: cursor_iter = buffer.get_iter_at_mark(buffer.get_insert()) start_sentence = cursor_iter.copy() if not start_sentence.starts_sentence(): @@ -385,16 +385,16 @@ class MarkupHandler: def get_margin_indent(self, margin_level, indent_level, baseline_margin=None, char_width=None): if baseline_margin is None: - baseline_margin = self.text_view.props.left_margin + baseline_margin = self.textview.get_left_margin() if char_width is None: - char_width = helpers.get_char_width(self.text_view) + char_width = helpers.get_char_width(self.textview) margin = max(baseline_margin + char_width * margin_level, 0) indent = char_width * indent_level return margin, indent def update_margins_indents(self): - baseline_margin = self.text_view.props.left_margin - char_width = helpers.get_char_width(self.text_view) + baseline_margin = self.textview.get_left_margin() + char_width = helpers.get_char_width(self.textview) # Bail out if neither the baseline margin nor character width change if baseline_margin == self.baseline_margin and char_width == self.char_width: @@ -405,7 +405,7 @@ class MarkupHandler: # Adjust tab size tab_array = Pango.TabArray.new(1, True) tab_array.set_tab(0, Pango.TabAlign.LEFT, 4 * char_width) - self.text_view.set_tabs(tab_array) + self.textview.set_tabs(tab_array) # Adjust margins and indents for level, tag in self.tags_margins_indents.items(): diff --git a/apostrophe/text_view_scroller.py b/apostrophe/text_view_scroller.py index 61623f1..a36ecbd 100755 --- a/apostrophe/text_view_scroller.py +++ b/apostrophe/text_view_scroller.py @@ -14,10 +14,10 @@ # END LICENSE class TextViewScroller: - def __init__(self, text_view, scrolled_window): + def __init__(self, textview, scrolled_window): super().__init__() - self.text_view = text_view + self.textview = textview self.scrolled_window = scrolled_window self.smooth_scroller = None @@ -59,12 +59,12 @@ class TextViewScroller: def get_target_pos_for_mark(self, mark, center): margin = 32 - mark_iter = self.text_view.get_buffer().get_iter_at_mark(mark) - mark_rect = self.text_view.get_iter_location(mark_iter) + mark_iter = self.textview.get_buffer().get_iter_at_mark(mark) + mark_rect = self.textview.get_iter_location(mark_iter) vap = self.scrolled_window.get_vadjustment().props - pos_y = mark_rect.y + mark_rect.height + self.text_view.props.top_margin + pos_y = mark_rect.y + mark_rect.height + self.textview.props.top_margin pos_viewport_y = pos_y - vap.value target_pos = None if center: diff --git a/apostrophe/text_view_undo_redo_handler.py b/apostrophe/text_view_undo_redo_handler.py deleted file mode 100644 index 043309c..0000000 --- a/apostrophe/text_view_undo_redo_handler.py +++ /dev/null @@ -1,245 +0,0 @@ -import logging - -LOGGER = logging.getLogger('apostrophe') - - -class UndoableInsert: - """Something has been inserted into text_buffer""" - - def __init__(self, text_iter, text, length): - self.offset = text_iter.get_offset() - self.text = text - self.length = length - self.mergeable = not bool( - self.length > 1 or self.text in ( - "\r", "\n", " ")) - - def undo(self, text_buffer): - offset = self.offset - start = text_buffer.get_iter_at_offset(offset) - stop = text_buffer.get_iter_at_offset(offset + self.length) - text_buffer.place_cursor(start) - text_buffer.delete(start, stop) - - def redo(self, text_buffer): - start = text_buffer.get_iter_at_offset(self.offset) - text_buffer.insert(start, self.text) - new_cursor_pos = text_buffer.get_iter_at_offset( - self.offset + self.length) - text_buffer.place_cursor(new_cursor_pos) - - def merge(self, next_action): - """Merge a following action into this insert, if possible - - can't merge if prev is not another insert - can't merge if prev and cur are not mergeable in the first place - can't merge when user set the input bar somewhere else - can't merge across word boundaries""" - - if not isinstance(next_action, UndoableInsert): - return False - if not self.mergeable or not next_action.mergeable: - return False - if self.offset + self.length != next_action.offset: - return False - whitespace = (' ', '\t') - if self.text in whitespace != next_action.text in whitespace: - return False - - self.length += next_action.length - self.text += next_action.text - return True - - -class UndoableDelete: - """Something has been deleted from text_buffer""" - - def __init__(self, text_buffer, start_iter, end_iter): - self.text = text_buffer.get_text(start_iter, end_iter, False) - self.start = start_iter.get_offset() - self.end = end_iter.get_offset() - # Find out if backspace or delete were used to not mess up redo - insert_iter = text_buffer.get_iter_at_mark(text_buffer.get_insert()) - self.delete_key_used = bool(insert_iter.get_offset() <= self.start) - self.mergeable = not bool( - self.end - - self.start > 1 or self.text in ( - "\r", - "\n", - " ")) - - def undo(self, text_buffer): - start = text_buffer.get_iter_at_offset(self.start) - text_buffer.insert(start, self.text) - if self.delete_key_used: - text_buffer.place_cursor(start) - else: - stop = text_buffer.get_iter_at_offset(self.end) - text_buffer.place_cursor(stop) - - def redo(self, text_buffer): - start = text_buffer.get_iter_at_offset(self.start) - stop = text_buffer.get_iter_at_offset(self.end) - text_buffer.delete(start, stop) - text_buffer.place_cursor(start) - - def merge(self, next_action): - """Check if this delete can be merged with a previous action - - can't merge if prev is not another delete - can't merge if prev and cur are not mergeable in the first place - can't merge if delete and backspace key were both used - can't merge across word boundaries""" - - if not isinstance(next_action, UndoableDelete): - return False - if not self.mergeable or not next_action.mergeable: - return False - if self.delete_key_used != next_action.delete_key_used: - return False - if self.start != next_action.start and self.start != next_action.end: - return False - whitespace = (' ', '\t') - if self.text in whitespace != next_action.text in whitespace: - return False - - if self.delete_key_used: - self.text += next_action.text - self.end += (next_action.end - next_action.start) - else: - self.text = "%s%s" % (next_action.text, self.text) - self.start = next_action.start - return True - - -class UndoableGroup(list): - """A list of undoable actions, usually corresponding to a single user action""" - - def undo(self, text_buffer): - for undoable in reversed(self): - undoable.undo(text_buffer) - - def redo(self, text_buffer): - for undoable in self: - undoable.redo(text_buffer) - - def merge(self, next_action): - if len(self) == 1: - return self[0].merge(next_action) - else: - return False - - -class UndoRedoHandler: - """Manages undo/redo for a given text_buffer. - - Methods can be called directly, as well as be used as signal callbacks.""" - - def __init__(self): - self.undo_stack = [] - self.redo_stack = [] - self.current_undo_group = None - self.undo_in_progress = False - - def undo(self, text_view, _data=None): - """Undo insertions or deletions. Undone actions are moved to redo stack. - - This method can be registered to a custom undo signal, - or used independently.""" - - if not self.undo_stack: - return - self.undo_in_progress = True - undo_action = self.undo_stack.pop() - self.redo_stack.append(undo_action) - undo_action.undo(text_view.get_buffer()) - self.undo_in_progress = False - - def redo(self, text_view, _data=None): - """Redo insertions or deletions. Redone actions are moved to undo stack - - This method can be registered to a custom redo signal, - or used independently.""" - - if not self.redo_stack: - return - self.undo_in_progress = True - redo_action = self.redo_stack.pop() - self.undo_stack.append(redo_action) - redo_action.redo(text_view.get_buffer()) - self.undo_in_progress = False - - def clear(self): - self.undo_stack = [] - self.redo_stack = [] - - def on_begin_user_action(self, _text_buffer): - """Start of a user action. - Refer to TextBuffer's "begin-user-action" signal. - - This method must be registered to TextBuffer's - "begin-user-action" signal, or called - manually followed by on_end_user_action.""" - - self.current_undo_group = UndoableGroup() - - def on_end_user_action(self, _text_buffer): - """End of a user action. - Refer to TextBuffer's "end-user-action" signal. - - This method must be registered to TextBuffer's - "end-user-action" signal, or called - manually preceded by on_start_user_action.""" - - if self.current_undo_group: - self.undo_stack.append(self.current_undo_group) - self.current_undo_group = None - - def on_insert_text(self, _text_buffer, text_iter, text, _length): - """Records a text insert. - Refer to TextBuffer's "insert-text" signal. - - This method must be registered to TextBuffer's - "insert-text" signal, or called manually - in between on_begin_user_action and on_end_user_action.""" - - self.__record_undoable(UndoableInsert(text_iter, text, len(text))) - - def on_delete_range(self, text_buffer, start_iter, end_iter): - """Records a range deletion. - Refer to TextBuffer's "delete-range" signal. - - This method must be registered to TextBuffer's - "delete-range" signal, or called manually - in between on_begin_user_action and on_end_user_action.""" - - self.__record_undoable( - UndoableDelete( - text_buffer, - start_iter, - end_iter)) - - def __record_undoable(self, undoable): - """Records a change, merging it to a previous one if possible.""" - - if not self.undo_in_progress: - self.redo_stack = [] - else: - return - - prev_group_undoable = self.current_undo_group[-1] if self.current_undo_group else None - prev_stack_undoable = self.undo_stack[-1] if self.undo_stack else None - - if prev_group_undoable: - merged = prev_group_undoable.merge(undoable) - elif prev_stack_undoable: - merged = prev_stack_undoable.merge(undoable) - else: - merged = False - - if not merged: - if self.current_undo_group is None: - LOGGER.warning("Recording a change without a user action.") - self.undo_stack.append(undoable) - else: - self.current_undo_group.append(undoable) diff --git a/apostrophe/theme_switcher.py b/apostrophe/theme_switcher.py index 12c733f..9c59461 100644 --- a/apostrophe/theme_switcher.py +++ b/apostrophe/theme_switcher.py @@ -15,47 +15,38 @@ # END LICENSE import gi -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, GObject, Gio, Handy -from .settings import Settings +gi.require_version('Gtk', '4.0') +from gi.repository import Adw, Gio, GObject, Gtk + from apostrophe.helpers import get_media_path +from .settings import Settings + + class Theme: '''Abstracts getters for the current theme related resources''' settings = Settings.new() - def __init__(self, name, gtk_css, gtk_css_hc, web_css): - self.name = name - self.gtk_css = gtk_css - self.gtk_css_hc = gtk_css_hc - self.web_css = web_css + def __init__(self, name, web_css): + self.name = name + self.web_css = web_css @classmethod - def get_for_name(cls, name, default=None): - current_theme = default or defaultThemes[0] + def get_current(cls): + current_theme = defaultThemes[0] + color_scheme = cls.settings.get_string("color-scheme") for theme in defaultThemes: - if name == theme.name: + if color_scheme == theme.name: current_theme = theme return current_theme - @classmethod - def get_current(cls): - color_scheme = cls.settings.get_string("color-scheme") - return cls.get_for_name(color_scheme) - defaultThemes = [ - Theme('light', Gio.File.new_for_uri("resource:///org/gnome/gitlab/somas/Apostrophe/media/css/gtk/Adwaita.css"), - Gio.File.new_for_uri("resource:///org/gnome/gitlab/somas/Apostrophe/media/css/gtk/Adwaita-hc.css"), - get_media_path('/media/css/web/adwaita.css')), - Theme('dark', Gio.File.new_for_uri("resource:///org/gnome/gitlab/somas/Apostrophe/media/css/gtk/Adwaita-dark.css"), - Gio.File.new_for_uri("resource:///org/gnome/gitlab/somas/Apostrophe/media/css/gtk/Adwaita-dark-hc.css"), - get_media_path('/media/css/web/adwaita.css')), - Theme('sepia', Gio.File.new_for_uri("resource:///org/gnome/gitlab/somas/Apostrophe/media/css/gtk/Adwaita-sepia.css"), - Gio.File.new_for_uri("resource:///org/gnome/gitlab/somas/Apostrophe/media/css/gtk/Adwaita-sepia-hc.css"), - get_media_path('/media/css/web/adwaita-sepia.css')), + Theme('light', get_media_path('/media/css/web/adwaita.css')), + Theme('dark', get_media_path('/media/css/web/adwaita.css')), + Theme('sepia', get_media_path('/media/css/web/adwaita-sepia.css')), ] @@ -87,21 +78,21 @@ class ThemeSwitcher(Gtk.Box): if color_scheme == "auto": self.system_selector.set_active(True) - self.style_manager.set_color_scheme(Handy.ColorScheme.PREFER_LIGHT) + self.style_manager.set_color_scheme(Adw.ColorScheme.PREFER_LIGHT) if color_scheme == "light": self.light_selector.set_active(True) - self.style_manager.set_color_scheme(Handy.ColorScheme.FORCE_LIGHT) + self.style_manager.set_color_scheme(Adw.ColorScheme.FORCE_LIGHT) if color_scheme == "sepia": self.sepia_selector.set_active(True) - self.style_manager.set_color_scheme(Handy.ColorScheme.FORCE_LIGHT) + self.style_manager.set_color_scheme(Adw.ColorScheme.FORCE_LIGHT) if color_scheme == "dark": self.dark_selector.set_active(True) - self.style_manager.set_color_scheme(Handy.ColorScheme.FORCE_DARK) + self.style_manager.set_color_scheme(Adw.ColorScheme.FORCE_DARK) def __init__(self, **kwargs): super().__init__(**kwargs) - self.style_manager = Handy.StyleManager.get_default() + self.style_manager = Adw.StyleManager.get_default() color_scheme = self.settings.get_string("color-scheme") self.color_scheme = color_scheme diff --git a/apostrophe/tweener.py b/apostrophe/tweener.py deleted file mode 100644 index 104655f..0000000 --- a/apostrophe/tweener.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright 2022, Manuel Genovés -# Alexander Mikhaylenko -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 3, as published -# by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranties of -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# END LICENSE -# -# Based on code by Alexander Mikhaylenko - -import gi -gi.require_version('Gtk', '3.0') -gi.require_version('Handy', '1') -from gi.repository import GObject, Handy - - -class Tweener(GObject.Object): - - def __init__(self, widget, setter, value_from, value_to, duration, offset=0, setter_args = None, callback = None, callback_arg = None): - self.widget = widget - self.value_from = value_from - self.value_to = value_to - self.duration = duration - self.offset = offset - if setter_args is None: - self.setter_args = [] - else: - self.setter_args = setter_args - self.callback = callback - self.callback_arg = callback_arg - - self.start_time = 0 - self.tick_cb_id = 0 - - self.setter = setter - - self.current_value = 0 - - def stop(self): - if (self.tick_cb_id != 0): - - self.widget.remove_tick_callback(self.tick_cb_id) - self.tick_cb_id = 0 - if self.callback is not None: - self.callback(self.callback_arg) - - def start(self): - if (not Handy.get_enable_animations(self.widget) or - not self.widget.get_mapped() or - self.duration < 0): - self.setter(self.value_to, *self.setter_args) - self.widget.queue_draw() - return - - if (self.tick_cb_id != 0): - self.widget.remove_tick_callback(self.tick_cb_id) - self.tick_cb_id = 0 - - self.setter(self.value_from, *self.setter_args) - - self.start_time = self.widget.get_frame_clock().get_frame_time() / 1000 - self.tick_cb_id = self.widget.add_tick_callback(self.__tick_cb) - - def __tick_cb(self, widget, frame_clock): - frame_time = frame_clock.get_frame_time() / 1000 - t = (frame_time - self.start_time - self.offset) / self.duration - - if t >= 1: - self.current_value = self.value_to - self.stop() - self.tick_cb_id = 0 - - self.setter(self.current_value, *self.setter_args) - - return False - - if t < 0: - return True - - self.current_value = self.value_from\ - + (self.value_to - self.value_from)\ - * Handy.ease_out_cubic(t) - - self.setter(self.current_value, *self.setter_args) - self.widget.queue_draw() - - return True diff --git a/build-aux/flatpak/org.gnome.gitlab.somas.Apostrophe.json b/build-aux/flatpak/org.gnome.gitlab.somas.Apostrophe.json index f55447a..92575db 100644 --- a/build-aux/flatpak/org.gnome.gitlab.somas.Apostrophe.json +++ b/build-aux/flatpak/org.gnome.gitlab.somas.Apostrophe.json @@ -1,11 +1,10 @@ { "app-id" : "org.gnome.gitlab.somas.Apostrophe", "runtime" : "org.gnome.Platform", - "runtime-version" : "41", + "runtime-version" : "42", "sdk" : "org.gnome.Sdk", "command" : "apostrophe", "finish-args" : [ - "--socket=x11", "--socket=wayland", "--share=ipc", "--share=network", @@ -24,62 +23,52 @@ } }, "modules" : [ + { + "name" : "libadwaita", + "buildsystem" : "meson", + "config-opts" : [ + "-Dexamples=false", + "-Dtests=false" + ], + "sources" : [ { - "name": "libhandy", - "buildsystem": "meson", - "builddir": true, - "config-opts": [ - "-Dexamples=false", - "-Dtests=false" - ], - "sources": [ - { - "type": "git", - "url": "https://gitlab.gnome.org/GNOME/libhandy.git", - "branch": "main" - } - ] - }, + "type" : "git", + "url" : "https://gitlab.gnome.org/GNOME/libadwaita.git", + "tag" : "1.2.alpha" + } + ], + "modules" : [ { "name" : "libsass", + "buildsystem" : "meson", "cleanup" : [ "*" ], "sources" : [ { - "type" : "archive", - "url" : "https://github.com/sass/libsass/archive/3.6.4.tar.gz", - "sha256" : "f9484d9a6df60576e791566eab2f757a97fd414fce01dd41fc0a693ea5db2889" - }, - { - "type" : "script", - "dest-filename" : "autogen.sh", - "commands" : [ - "autoreconf -si" - ] + "type" : "git", + "url" : "https://github.com/lazka/libsass.git", + "branch" : "meson" } ] }, { "name" : "sassc", + "buildsystem" : "meson", "cleanup" : [ "*" ], "sources" : [ { - "type" : "archive", - "url" : "https://github.com/sass/sassc/archive/3.6.1.tar.gz", - "sha256" : "8cee391c49a102b4464f86fc40c4ceac3a2ada52a89c4c933d8348e3e4542a60" - }, - { - "type" : "script", - "dest-filename" : "autogen.sh", - "commands" : [ - "autoreconf -si" - ] + "type" : "git", + "url" : "https://github.com/lazka/sassc.git", + "branch" : "meson" } ] - }, + } + ] +}, + { "name" : "gspell", "sources" : [ @@ -179,8 +168,6 @@ } ], "build-options" : { - "env" : { - "" : null - } + "env" : { } } } diff --git a/data/apostrophe.gresource.xml b/data/apostrophe.gresource.xml index 581af56..d94e78d 100644 --- a/data/apostrophe.gresource.xml +++ b/data/apostrophe.gresource.xml @@ -6,13 +6,9 @@ media/icons/preview-layout-windowed-symbolic.svg media/icons/preview-layout-half-height-symbolic.svg media/icons/checkmark-symbolic.svg - media/css/gtk/Adwaita.css - media/css/gtk/Adwaita-hc.css - media/css/gtk/Adwaita-dark.css - media/css/gtk/Adwaita-dark-hc.css - media/css/gtk/Adwaita-sepia.css - media/css/gtk/Adwaita-sepia-hc.css - media/css/gtk/bindings.css + media/css/gtk/style.css + media/css/gtk/style-dark.css + media/css/gtk/style-sepia.css ui/Export.ui ui/Headerbar.ui ui/Preferences.ui @@ -26,6 +22,7 @@ ui/TextView.ui ui/ThemeSwitcher.ui ui/Window.ui + ui/AboutHemingway.ui About.ui media/apostrophe_markdown.md diff --git a/data/media/css/gtk/Adwaita-dark-hc.scss b/data/media/css/gtk/Adwaita-dark-hc.scss deleted file mode 100644 index 1720fab..0000000 --- a/data/media/css/gtk/Adwaita-dark-hc.scss +++ /dev/null @@ -1,5 +0,0 @@ -$variant: 'dark'; -$high_contrast: true; - -@import 'definitions'; -@import 'base' \ No newline at end of file diff --git a/data/media/css/gtk/Adwaita-dark.scss b/data/media/css/gtk/Adwaita-dark.scss deleted file mode 100644 index ff14597..0000000 --- a/data/media/css/gtk/Adwaita-dark.scss +++ /dev/null @@ -1,5 +0,0 @@ -$variant: 'dark'; -$high_contrast: false; - -@import 'definitions'; -@import 'base' \ No newline at end of file diff --git a/data/media/css/gtk/Adwaita-hc.scss b/data/media/css/gtk/Adwaita-hc.scss deleted file mode 100644 index deb561c..0000000 --- a/data/media/css/gtk/Adwaita-hc.scss +++ /dev/null @@ -1,5 +0,0 @@ -$variant: 'light'; -$high_contrast: true; - -@import 'definitions'; -@import 'base'; \ No newline at end of file diff --git a/data/media/css/gtk/Adwaita-sepia-hc.scss b/data/media/css/gtk/Adwaita-sepia-hc.scss deleted file mode 100644 index c3f76e3..0000000 --- a/data/media/css/gtk/Adwaita-sepia-hc.scss +++ /dev/null @@ -1,7 +0,0 @@ -$variant: 'light'; -$high_contrast: true; -$window_color: #f4e8d5; - -@import 'definitions'; -@import 'recoloring'; -@import 'base'; \ No newline at end of file diff --git a/data/media/css/gtk/Adwaita-sepia.scss b/data/media/css/gtk/Adwaita-sepia.scss deleted file mode 100644 index f6e35aa..0000000 --- a/data/media/css/gtk/Adwaita-sepia.scss +++ /dev/null @@ -1,7 +0,0 @@ -$variant: 'light'; -$high_contrast: false; -$window_color: #f4e8d5; - -@import 'definitions'; -@import 'recoloring'; -@import 'base'; \ No newline at end of file diff --git a/data/media/css/gtk/Adwaita.scss b/data/media/css/gtk/Adwaita.scss deleted file mode 100644 index f78af47..0000000 --- a/data/media/css/gtk/Adwaita.scss +++ /dev/null @@ -1,5 +0,0 @@ -$variant: 'light'; -$high_contrast: false; - -@import 'definitions'; -@import 'base'; \ No newline at end of file diff --git a/data/media/css/gtk/_base.scss b/data/media/css/gtk/_base.scss deleted file mode 100644 index da0ad15..0000000 --- a/data/media/css/gtk/_base.scss +++ /dev/null @@ -1,241 +0,0 @@ -@import 'drawing'; - -@define-color code_bg_color mix(#{$base_color}, #{$fg_color}, 0.15); - -/* Main window and text colors */ - -#titlebar-revealer { - padding: 0; -} - -.apostrophe-editor { - text-decoration-color: $error_color; - font-family: 'Fira Mono', monospace; - font-size: 1.091em; - - text{ - background: $base_color; - color: $fg_color; //->text-color? - caret-color: $fg_color; - } - - &.size14 { - font-size: 0.955em; - } - - &.size15 { - font-size: 1.023em; - } - - &.size16 { - font-size: 1.091em; - } - - &.size17 { - font-size: 1.159em; - } - - &.size18 { - font-size: 1.227em; - } - - &.size20 { - font-size: 1.364em; - } - - &.size22 { - font-size: 1.5em; - } - - &.size24 { - font-size: 1.636em; - } -} - -.inline-button { - color: transparentize($fg_color, 0.4); - background-color: transparentize($base_color, 0.1); - text-shadow: inherit; - box-shadow: initial; - background-clip: initial; - background-origin: initial; - background-size: initial; - background-position: initial; - background-repeat: initial; - background-image: initial; - border-image-source: initial; - border-image-repeat: initial; - border-image-slice: initial; - border-image-width: initial; - border-style: none; - padding: 0px 16px; - transition: 100ms ease-in; -} - -.inline-button:hover, -.inline-button:checked { - color: $fg_color; - background-color: mix($base_color, $bg_color, 0.5); -} - - -.lexikon { - font-family: serif; - font-size: 12px; - background: $bg_color; - border: 4px solid $bg_color; - - .header { - font-size: 14px; - padding-top: 16px; - padding-bottom: 4px; - font-weight: bold; - } - - .header.first { - padding-top: 0px; - } - - .number { - padding-left: 16px; - padding-right: 4px; - } -} - -.quick-preview-popup { - background-color: $bg_color; - padding: 8px 12px 8px 12px; - - - grid { - background-color: $bg_color; - color: $fg_color; - border-color: $bg_color; - } - - label { - color: $fg_color; - } -} - -/* theme selector */ - -.themeswitcher { - $_light_bg: white; - $_light_fg: transparentize(black, .1); - $_dark_bg: #2d2d2d; - $_dark_fg: #eeeeec; - $_sepia_bg: #F0E8DD; - $_sepia_fg: #3b3228; - $_selected_color: #3584e4; - .check { - background: $_selected_color; - color: white; - padding: 2px; - border-radius: 17px; - } - /* Adapted from https://gitlab.gnome.org/GNOME/gnome-text-editor/-/blob/bf8c0c249f06a0be69e65aed3b786ba02a9f999e/src/TextEditor.css#L51 */ - radiobutton { - -gtk-outline-radius: 100px; - outline-offset: 1px; - transition: none; - radio { - -gtk-icon-source: none; - background: none; - box-shadow: none; - padding: 12px; - min-height: 18px; - min-width: 18px; - border: none; - outline-color: currentColor; - transition: none; - @if $high_contrast { - @if $variant=='light' { - box-shadow: inset 0 0 0 1px transparentize(black, .3); - } - @else { - box-shadow: inset 0 0 0 1px transparentize(white, .7); - } - } - @else { - @if $variant=='light' { - box-shadow: inset 0 0 0 1px transparentize(black, .8); - } - @else { - box-shadow: 0 0 0 1px transparentize(black, .3); - } - } - &:checked { - box-shadow: inset 0 0 0 2px $_selected_color; - } - } - &.system radio { - color: $_light_fg; - background: linear-gradient(-45deg, $_dark_bg 49.99%, $_light_bg 50.01%); - } - &.light radio { - color: $_light_fg; - background-color: $_light_bg; - } - &.sepia radio { - color: $_sepia_fg; - background-color: $_sepia_bg; - } - &.dark radio { - color: $_dark_fg; - background-color: $_dark_bg; - } - } -} - -.preview_button_left:checked{ - border-top-right-radius: 0px; - border-bottom-right-radius: 0px; - border-right-style: none; -} - -.preview_button_right{ - border-top-left-radius: 0px; - border-bottom-left-radius: 0px; -} - -/* Recents */ -.open-popover { - contents { - padding: 0; - } - - list { - background:none; - margin-bottom: 3px; - } - - list label.placeholder { - min-height: 57px; - } - - list row { - border-radius: 9px; - margin: 3px 6px; - } - - list row:first-child { - margin-top: 6px; - } - - list row button { - padding: 3px; - margin: 0; - min-height: 24px; - min-width: 24px; - } - - list row:hover, - list row:focus { - background: transparentize($fg_color, .85); - } - - separator { - margin-bottom: 0; - } -} \ No newline at end of file diff --git a/data/media/css/gtk/_definitions.scss b/data/media/css/gtk/_definitions.scss deleted file mode 100644 index 3527e31..0000000 --- a/data/media/css/gtk/_definitions.scss +++ /dev/null @@ -1,32 +0,0 @@ -/* Copy of Adwaita colors for _drawing.scss */ - -$base_color: if($variant == 'light', #ffffff, lighten(desaturate(#241f31, 100%), 2%)); -$fg_color: if($variant == 'light', #2e3436, #eeeeec); -$bg_color: if($variant == 'light', #f6f5f4, darken(desaturate(#3d3846, 100%), 4%)); -$selected_fg_color: #ffffff; -$selected_bg_color: if($variant == 'light', #3584e4, darken(#3584e4, 20%)); -$borders_color: if($variant == 'light', darken($bg_color, 18%), darken($bg_color, 10%)); -$borders_edge: if($variant == 'light', transparentize(white, 0.2), transparentize($fg_color, 0.07)); -$backdrop_borders_color: mix($borders_color, $bg_color, 80%); -$shadow_color: transparentize(black, 0.9); -$top_hilight: $borders_edge; -$error_color: #cc0000; - -@if $high_contrast { - $fg_color: if($variant == 'light', darken($fg_color, 3%), lighten($fg_color, 2%)); - $bg_color: if($variant == 'light', lighten($bg_color, 3%), darken($bg_color, 2%)); - $selected_bg_color: darken($selected_bg_color,10%); - $borders_color: if($variant == 'light', darken($borders_color, 30%), lighten($borders_color, 30%)); -} - -$backdrop_transition: 200ms ease-out; - -/* Helpers */ - -@function themecolor($s) { - @return unquote("@" + "#{$s}"); -} - -@function gtkalpha($c,$a) { - @return unquote("alpha(#{$c},#{$a})"); -} diff --git a/data/media/css/gtk/_drawing.scss b/data/media/css/gtk/_drawing.scss deleted file mode 100644 index b5193ec..0000000 --- a/data/media/css/gtk/_drawing.scss +++ /dev/null @@ -1,615 +0,0 @@ -// Drawing mixins - -// generic drawing of more complex things - -@function _widget_edge($c:$borders_edge) { - // outer highlight "used" on most widgets - @if $c == none { @return none; } - @else { @return 0 1px $c; } - } - - @mixin _shadows($list...) { - // - // Helper mixin to stack up to box-shadows; - // - $shadows: null; - - @each $shadow in $list { - @if $shadow!=none { $shadows: $shadows, $shadow; } - } - - box-shadow: $shadows; - } - - // entries - @function entry_focus_border($fc:$selected_bg_color) { - @if $variant == 'light' { @return $fc; } - @else { @return if($fc==$selected_bg_color, $selected_borders_color, darken($fc, 35%)); } - } - - @function entry_focus_shadow($fc:$selected_bg_color) { @return inset 0 0 0 1px $fc; } - - @mixin entry($t, $fc:$selected_bg_color, $edge: none) { - // - // Entries drawing function - // - // $t: entry type - // $fc: focus color - // $edge: set to none to not draw the bottom edge or specify a color to not - // use the default one - // - // possible $t values: - // normal, focus, insensitive, backdrop, backdrop-insensitive, osd, osd-focus, osd-backdrop; - // - - $_blank_edge: if($edge == none, none, 0 1px transparentize($edge, 1)); - $_entry_edge: if($edge == none, none, _widget_edge($edge)); - - @if $t==normal { - color: $text_color; - border-color: $borders_color; - background-color: $base_color; - @include _shadows(entry_focus_shadow(transparentize($fc, 1)), $_entry_edge); - // for the transition to work the number of shadows in different states needs to match, hence the transparent shadow here. - } - @if $t==focus { - @include _shadows(entry_focus_shadow($fc), $_entry_edge); - border-color: entry_focus_border($fc); - } - @if $t==insensitive { - color: $insensitive_fg_color; - border-color: $borders_color; - background-color: $insensitive_bg_color; - box-shadow: $_entry_edge; - } - @if $t==backdrop { - color: $backdrop_text_color; - border-color: $backdrop_borders_color; - background-color: $backdrop_base_color; - box-shadow: $_blank_edge; - } - @if $t==backdrop-insensitive { - color: $backdrop_insensitive_color; - border-color: $backdrop_borders_color; - background-color: $insensitive_bg_color; - box-shadow: $_blank_edge; - } - @if $t==osd { - color: $osd_text_color; - border-color: $osd_borders_color; - background-color: transparentize(opacify($osd_borders_color, 1), 0.5); - background-clip: padding-box; - box-shadow: none; - text-shadow: 0 1px black; - -gtk-icon-shadow: 0 1px black; - } - @if $t==osd-focus { - color: $osd_text_color; - border-color: $selected_bg_color; - background-color: transparentize(opacify($osd_borders_color, 1), 0.5); - background-clip: padding-box; - box-shadow: entry_focus_shadow($fc); - text-shadow: 0 1px black; - -gtk-icon-shadow: 0 1px black; - } - @if $t==osd-insensitive { - color: $osd_insensitive_fg_color; - border-color: $osd_borders_color; - background-color: $osd_insensitive_bg_color; - background-clip: padding-box; - box-shadow: none; - text-shadow: none; - -gtk-icon-shadow: none; - } - @if $t==osd-backdrop { - color: $osd_text_color; - border-color: $osd_borders_color; - background-color: transparentize(opacify($osd_borders_color, 1), 0.5); - background-clip: padding-box; - box-shadow: none; - text-shadow: none; - -gtk-icon-shadow: none; - } - } - - // buttons - - @function _border_color($c, $darker: false) { - @if $darker == true { @return darken($c, 20%); } - @else { @return darken($c, 10%); } - } - - @function _text_shadow_color ($tc: $fg_color, $bg: $bg_color) { - // - // calculate the color of text shadows - // - // $tc is the text color - // $bg is the background color - // - $_lbg: lightness($bg)/100%; - @if lightness($tc)<50% { @return transparentize(white, 1-$_lbg/($_lbg*1.3)); } - @else { @return transparentize(black, $_lbg*0.8); } - } - - @function _button_hilight_color($c) { - // - // calculate the right top hilight color for buttons - // - // $c: base color; - // - @if lightness($c)>95% { @return white; } - @else if lightness($c)>90% { @return transparentize(white, 0.2); } - @else if lightness($c)>80% { @return transparentize(white, 0.5); } - @else if lightness($c)>50% { @return transparentize(white, 0.8); } - @else if lightness($c)>40% { @return transparentize(white, 0.9); } - @else { @return transparentize(white, 0.98); } - } - - @mixin _button_text_shadow ($tc:$fg_color, $bg:$bg_color) { - // - // helper function for the text emboss effect - // - // $tc is the optional text color, not the shadow color - // - // TODO: this functions needs a way to deal with special cases - // - - $_shadow: _text_shadow_color($tc, $bg); - - @if lightness($tc)<50% { - text-shadow: 0 1px $_shadow; - -gtk-icon-shadow: 0 1px $_shadow; - } - @else { - text-shadow: 0 -1px $_shadow; - -gtk-icon-shadow: 0 -1px $_shadow; - } - } - - @mixin button($t, $c:$bg_color, $tc:$fg_color, $edge: none, $backimage: null) { - // - // Button drawing function - // - // $t: button type, - // $c: base button color for colored* types - // $tc: optional text color for colored* types - // $edge: set to none to not draw the bottom edge or specify a color to not - // use the default one - // $backimage: additional background-image behind the default one - // (for the button.circular hack) - // - // possible $t values: - // normal, hover, active, insensitive, insensitive-active, - // backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active, - // osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated - // - $_hilight_color: _button_hilight_color($c); - $_button_edge: if($edge == none, none, _widget_edge($edge)); - $_blank_edge: if($edge == none, none, _widget_edge(transparentize($edge,1))); - $_button_shadow: 0 1px 2px transparentize($shadow_color, 0.03); - - @if $t==normal { - // - // normal button - // - color: $tc; - outline-color: transparentize($tc, 0.7); - border-color: if($c != $bg_color, _border_color($c), $borders_color); - border-bottom-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color); - background-image: if($variant == 'light', linear-gradient(to top, darken($c, 4%) 2px, $c), - linear-gradient(to top, darken($c,1%) 2px, $c)), - $backimage; - @include _button_text_shadow($tc, $c); - @include _shadows(inset 0 1px $_hilight_color, $_button_edge, $_button_shadow); - } - - @else if $t==hover { - // - // hovered button - // - color: $tc; - outline-color: transparentize($tc, 0.7); - border-color: if($c != $bg_color, _border_color($c), $borders_color); - border-bottom-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color); - @if $variant == 'light' { - background-image: linear-gradient(to top, $c, lighten($c, 1%) 1px), - $backimage; - @include _button_text_shadow($tc, lighten($c, 6%)); - @include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)), $_button_edge, $_button_shadow); - } - @else { - background-image: linear-gradient(to top, darken($c,1%), lighten($c, 1%) 1px), - $backimage; - @include _button_text_shadow($tc,lighten($c, 6%)); - @include _shadows(inset 0 1px _button_hilight_color(darken($c, 2%)), $_button_edge, $_button_shadow); - } - } - - @if $t==normal-alt { - // - // normal button alternative look - // - color: $tc; - outline-color: transparentize($tc, 0.7); - border-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color); - @include _button_text_shadow($tc, $c); - @if $variant == 'light' { - background-image: linear-gradient(to bottom, lighten($c, 5%) 20%, $c 90%); - @include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)), - $_button_edge, $_button_shadow); - } - @else { - background-image: linear-gradient(to bottom, darken($c, 3%) 20%, darken($c, 6%) 90%); - @include _shadows(inset 0 1px $_hilight_color, - $_button_edge, $_button_shadow); - } - } - - @else if $t==hover-alt { - // - // hovered button alternative look - // - color: $tc; - outline-color: transparentize($tc, 0.7); - border-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color); - @if $variant == 'light' { - background-image: linear-gradient(to bottom, lighten($c, 9%) 10%, lighten($c, 4%) 90%); - @include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)), - $_button_edge, $_button_shadow); - } - @else { - background-image: linear-gradient(to bottom, $c 20%, darken($c, 4%) 90%); - @include _shadows(inset 0 1px $_hilight_color, - $_button_edge, $_button_shadow); - } - } - - @else if $t==active { - // - // pushed button - // - color: $tc; - outline-color: transparentize($tc, 0.7); - border-color: if($c != $bg_color, _border_color($c), $borders_color); - background-image: if($variant == 'light', image(darken($c, 14%)), image(darken($c, 9%))); - @include _shadows(inset 0 1px transparentize($_hilight_color, 1), $_button_edge); - - text-shadow: none; - -gtk-icon-shadow: none; - } - - @else if $t==insensitive { - // - // insensitive button - // - $_bg: if($c != $bg_color, mix($c, $base_color, 85%), $insensitive_bg_color); - - color: if($tc != $fg_color, mix($tc, $_bg, 50%), $insensitive_fg_color); - border-color: if($c != $bg_color, _border_color($c), $insensitive_borders_color); - background-image: image($_bg); - text-shadow: none; - -gtk-icon-shadow: none; - // white with 0 alpha to avoid an ugly transition, since no color means - // black with 0 alpha - @include _shadows(inset 0 1px transparentize(white, 1), $_button_edge); - } - - @else if $t==insensitive-active { - // - // insensitive pushed button - // - $_bg: if($variant == 'light', darken(mix($c, $base_color, 85%), 8%), darken(mix($c, $base_color, 85%), 6%)); - $_bc: if($c != $bg_color, _border_color($c), $insensitive_borders_color); - - color: if($c != $bg_color, mix($tc, $_bg, 60%), $insensitive_fg_color); - border-color: $_bc; - background-image: image($_bg); - // white with 0 alpha to avoid an ugly transition, since no color means - // black with 0 alpha - @include _shadows(inset 0 1px transparentize(white, 1), $_button_edge); - } - - @else if $t==backdrop { - // - // backdrop button - // - $_bg: if($c != $bg_color, $c, $backdrop_bg_color); - $_bc: if($variant == 'light', $c, _border_color($c)); - - color: if($tc != $fg_color, mix($tc, $_bg, 80%), $backdrop_fg_color); - border-color: if($c != $bg_color, $_bc, $backdrop_borders_color); - background-image: image($_bg); - text-shadow: none; - -gtk-icon-shadow: none; - @include _shadows(inset 0 1px transparentize(white, 1), $_blank_edge); - } - - @else if $t==backdrop-active { - // - // backdrop pushed button - // - $_bg: if($variant == 'light', darken(mix($c, $base_color, 85%), 8%), darken(mix($c, $base_color, 85%), 4%)); - $_bc: if($variant == 'light', $_bg ,_border_color($c)); - - color: if($tc != $fg_color, mix($tc, $_bg, 80%), $backdrop_fg_color); - border-color: if($c != $bg_color, $_bc, $backdrop_borders_color); - background-image: image($_bg); - @include _shadows(inset 0 1px transparentize(white, 1), $_blank_edge); - } - - @else if $t==backdrop-insensitive { - // - // backdrop insensitive button - // - - $_bg: if($c != $bg_color, mix($c, $base_color, 85%), $insensitive_bg_color); - $_bc: if($variant == 'light', $_bg,_border_color($c)); - - color: if($c != $bg_color, mix($tc, $_bg, 35%), $backdrop_insensitive_color); - border-color: if($c != $bg_color, $_bc, $backdrop_borders_color); - background-image: image($_bg); - text-shadow: none; - -gtk-icon-shadow: none; - // white with 0 alpha to avoid an ugly transition, since no color means - // black with 0 alpha - @include _shadows(inset 0 1px transparentize(white, 1), $_blank_edge); - } - - @else if $t==backdrop-insensitive-active { - // - // backdrop insensitive pushed button - // - - $_bg: if($variant == 'light', darken(mix($c, $base_color, 85%), 8%), darken(mix($c, $base_color, 85%), 4%)); - $_bc: if($variant == 'light', $_bg, _border_color($c)); - - color: if($c != $bg_color, mix($tc, $_bg, 35%), $backdrop_insensitive_color); - border-color: if($c != $bg_color, $_bc, $backdrop_borders_color); - background-image: image($_bg); - @include _shadows(inset 0 1px transparentize(white, 1), $_blank_edge); - } - - @else if $t==osd { - // - // normal osd button - // - $_bg: if($c != $bg_color, transparentize($c, 0.5), $osd_bg_color); - - color: $osd_fg_color; - border-color: $osd_borders_color; - background-color: transparent; - background-image: image($_bg); - background-clip: padding-box; - box-shadow: inset 0 1px transparentize(white, 0.9); - text-shadow: 0 1px black; - -gtk-icon-shadow: 0 1px black; - outline-color: transparentize($osd_fg_color, 0.7); - } - - @else if $t==osd-hover { - // - // active osd button - // - $_bg: if($c != $bg_color, transparentize($c, 0.3), lighten($osd_bg_color, 12%)); - - color: white; - border-color: $osd_borders_color; - background-color: transparent; - background-image: image($_bg); - background-clip: padding-box; - box-shadow: inset 0 1px transparentize(white, 0.9); - text-shadow: 0 1px black; - -gtk-icon-shadow: 0 1px black; - outline-color: transparentize($osd_fg_color, 0.7); - } - - @else if $t==osd-active { - // - // active osd button - // - $_bg: if($c != $bg_color, $c, $osd_borders_color); - - color: white; - border-color: $osd_borders_color; - background-color: transparent; - background-image: image($_bg); - background-clip: padding-box; - box-shadow: none; - text-shadow: none; - -gtk-icon-shadow: none; - outline-color: transparentize($osd_fg_color, 0.7); - } - - @else if $t==osd-insensitive { - // - // insensitive osd button - // - color: $osd_insensitive_fg_color; - border-color: $osd_borders_color; - background-color: transparent; - background-image: image($osd_insensitive_bg_color); - background-clip: padding-box; - box-shadow: none; - text-shadow: none; - -gtk-icon-shadow: none; - } - - @else if $t==osd-backdrop { - // - // backdrop osd button - // - $_bg: if($c != $bg_color, transparentize($c, 0.5), $osd_bg_color); - - color: $osd_fg_color; - border-color: $osd_borders_color; - background-color: transparent; - background-image: image($_bg); - background-clip: padding-box; - box-shadow: none; - text-shadow: none; - -gtk-icon-shadow: none; - } - - @else if $t==undecorated { - // - // reset - // - border-color: transparent; - background-color: transparent; - background-image: none; - - @include _shadows(inset 0 1px transparentize(white, 1), $_blank_edge); - - text-shadow: none; - -gtk-icon-shadow: none; - } - } - - @mixin headerbar_fill($c:$headerbar_color, $hc:$top_hilight, $ov: none) { - // - // headerbar fill - // - // $c: base color - // $hc: top highlight color - // $ov: a background layer for background shorthand (hence no commas!) - // - $gradient: linear-gradient(to top, darken($c, 2%), lighten($c, 1%)); - - @if $variant == 'dark' { $gradient: linear-gradient(to top, lighten($c, 4%), lighten($c, 6%)); } - - @if $ov != none { background: $c $ov, $gradient; } - @else { background: $c $gradient; } - - box-shadow: inset 0 1px $hc; // top highlight - } - - @mixin overshoot($p, $t:normal, $c:$fg_color) { - // - // overshoot - // - // $p: position - // $t: type - // $c: base color - // - // possible $p values: - // top, bottom, right, left - // - // possible $t values: - // normal, backdrop - // - - $_small_gradient_length: 5%; - $_big_gradient_length: 100%; - - $_position: center top; - $_small_gradient_size: 100% $_small_gradient_length; - $_big_gradient_size: 100% $_big_gradient_length; - - @if $p==bottom { - $_position: center bottom; - $_linear_gradient_direction: to top; - } - - @else if $p==right { - $_position: right center; - $_small_gradient_size: $_small_gradient_length 100%; - $_big_gradient_size: $_big_gradient_length 100%; - } - - @else if $p==left { - $_position: left center; - $_small_gradient_size: $_small_gradient_length 100%; - $_big_gradient_size: $_big_gradient_length 100%; - } - - $_small_gradient_color: $c; - $_big_gradient_color: $c; - - @if $c==$fg_color { - $_small_gradient_color: darken($borders_color, 10%); - $_big_gradient_color: $fg_color; - - @if $t==backdrop { $_small_gradient_color: $backdrop_borders_color; } - } - - $_small_gradient: -gtk-gradient(radial, - $_position, 0, - $_position, 0.5, - to($_small_gradient_color), - to(transparentize($_small_gradient_color, 1))); - - $_big_gradient: -gtk-gradient(radial, - $_position, 0, - $_position, 0.6, - from(transparentize($_big_gradient_color, 0.93)), - to(transparentize($_big_gradient_color, 1))); - - @if $t==normal { - background-image: $_small_gradient, $_big_gradient; - background-size: $_small_gradient_size, $_big_gradient_size; - } - - @else if $t==backdrop { - background-image: $_small_gradient; - background-size: $_small_gradient_size; - } - - background-repeat: no-repeat; - background-position: $_position; - - background-color: transparent; // reset some properties to be sure to not inherit them somehow - border: none; // - box-shadow: none; // - } - - /*************************** - * Check and Radio buttons * - ***************************/ - - @mixin check($t, $c:$bg_color, $tc:$fg_color, $checked: false) { - // Check/Radio drawing function - // - // $t: check/radio type, - // $c: base button color for colored* types - // $tc: optional text color for colored* types - // $checked: bool to chose between checked/unchecked - // - // possible $t values: - // normal, hover, active, insensitive, backdrop, backdrop-insensitive - - $_border_color: if($c==$checkradio_bg_color, $c, $alt_borders_color); - $_dim_border_color: transparentize($_border_color, if($variant == 'light', 0.3, 0.7)); - - @if $t==normal { - background-clip: if($checked, border-box, padding-box); - background-image: linear-gradient(to bottom, lighten($c, 5%) 20%, $c 90%); - border-color: $_border_color; - box-shadow: 0 1px transparentize(black, 0.95); - color: $tc; - } - - @if $t==hover { - background-image: if($c == white, image(darken($c, 5%)), linear-gradient(to bottom, lighten($c, 9%) 10%, lighten($c, 4%) 90%)); - } - - @if $t==active { - box-shadow: inset 0 1px 1px 0px if($variant == 'light', rgba(0, 0, 0, 0.2), black); - } - - @if $t==insensitive { - box-shadow: none; - color: transparentize($tc, 0.3); - } - - @if $t==backdrop { - background-image: image($c); - box-shadow: none; - color: $tc; - } - - @if $t==backdrop-insensitive { - box-shadow: none; - color: transparentize($tc, 0.3); - } - } - \ No newline at end of file diff --git a/data/media/css/gtk/_recoloring.scss b/data/media/css/gtk/_recoloring.scss deleted file mode 100644 index 6beea8c..0000000 --- a/data/media/css/gtk/_recoloring.scss +++ /dev/null @@ -1,127 +0,0 @@ -$base_color: lighten($window_color, 5%); -$bg_color: lighten($window_color, 5%); -$fg_color: hsl(hue($base_color), saturation($base_color), lightness($fg_color)); -$selected_bg_color: hsl(hue($base_color), saturation($base_color), lightness($selected_bg_color)); -$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%)); -$borders_color: if($variant == 'light', darken($bg_color, 18%), darken($bg_color, 10%)); -$alt_borders_color: if($variant == 'light', darken($bg_color, 24%), darken($bg_color, 18%)); -$borders_edge: if($variant == 'light', transparentize(white, 0.2), transparentize($fg_color, 0.93)); -$top_hilight: $borders_edge; -$dark_fill: mix($borders_color, $bg_color, 50%); - -$insensitive_fg_color: mix($fg_color, $bg_color, 50%); -$insensitive_bg_color: mix($bg_color, $base_color, 60%); -$insensitive_borders_color: $borders_color; - -$backdrop_bg_color: $bg_color; -$backdrop_fg_color: mix($fg_color, $backdrop_bg_color, 50%); -$backdrop_borders_color: mix($borders_color, $bg_color, 80%); -$backdrop_dark_fill: mix($backdrop_borders_color, $backdrop_bg_color, 35%); -$backdrop_insensitive_color: if($variant == 'light', darken($backdrop_bg_color, 15%), lighten($backdrop_bg_color, 15%)); - -@if $high_contrast { - $fg_color: if($variant == 'light', darken($fg_color, 3%), lighten($fg_color, 2%)); - $bg_color: if($variant == 'light', lighten($bg_color, 3%), darken($bg_color, 2%)); - $selected_bg_color: darken($selected_bg_color,10%); - $selected_borders_color: darken($selected_borders_color, 10%); - $borders_color: if($variant == 'light', darken($borders_color, 30%), lighten($borders_color, 30%)); - $alt_borders_color: if($variant == 'light', darken($alt_borders_color, 33%), lighten($alt_borders_color, 28%)); - - //insensitive state derived colors - $insensitive_fg_color: mix($fg_color, $bg_color, 50%); - $insensitive_bg_color: mix($bg_color, $base_color, 60%); - $insensitive_borders_color: mix($borders_color, $bg_color, 80%); -} - -$tab_bg: darken($bg_color, if($variant == 'dark', 6%, 12%)); -$tab_bg_backdrop: darken($backdrop_bg_color, 6%); - -@import 'drawing'; - -.apostrophe-window { - background: lighten($window_color, 5%); - color: $fg_color; - caret-color: $fg_color; - - headerbar { - @include headerbar_fill(darken($bg_color, 10%)); - - border-color: $alt_borders_color; - color: $fg_color; - - &:backdrop { - background-image: image($bg_color); - border-color: $backdrop_borders_color; - box-shadow: inset 0 1px $top_hilight; - color: $backdrop_fg_color; - } - } - - actionbar { - background: $bg_color; - - > revealer > box { - border-color: $borders_color; - } - - &:backdrop { - background: $backdrop_bg_color; - - > revealer > box { - border-color: $backdrop_borders_color; - } - } - } - - searchbar > revealer > box{ - border-color: $borders_color; - $_bg: mix($bg_color, $borders_color, 70%); - background-color: $_bg; - } - - headerbar, actionbar, searchbar { - button { - @include button(normal); - - &.flat, &.titlebutton { @include button(undecorated); } - - &.titlebutton { @include _button_text_shadow($fg_color); } - - &:hover { @include button(hover); } - - &:active, &:checked { @include button(active); } - - &:disabled { @include button(insensitive); } - - &:backdrop { - @include button(backdrop); - - &:active { @include button(backdrop-active); } - - &:disabled { @include button(backdrop-insensitive); } - } - - &:checked { - background: if($variant == 'light', image(darken($bg_color, 17%)), image(darken($bg_color, 9%))); - border-color: darken($borders_color, 3%); - border-top-color: darken($borders_color, 8%); - &:backdrop { - @include button(backdrop-active); - } - } - - &.flat:backdrop, &.titlebutton:backdrop { @include button(undecorated); } - } - } - - popover { - background: $bg_color; - } - - - text, - textview{ - background: transparent; - color: #5e3d25; - } -} \ No newline at end of file diff --git a/data/media/css/gtk/bindings.css b/data/media/css/gtk/bindings.css deleted file mode 100644 index d0cc6c4..0000000 --- a/data/media/css/gtk/bindings.css +++ /dev/null @@ -1,16 +0,0 @@ -@binding-set editor-bindings { - bind "i" { "insert-italic" () }; - bind "b" { "insert-bold" () }; - bind "r" { "insert-hrule" () }; - bind "u" { "insert-listitem" () }; - bind "z" { "undo" () }; - bind "y" { "redo" () }; - bind "d" { "insert-strikethrough" () }; - bind "z" { "redo" () }; -} - -.apostrophe-editor { - -gtk-key-bindings: editor-bindings; -} - - \ No newline at end of file diff --git a/data/media/css/gtk/meson.build b/data/media/css/gtk/meson.build deleted file mode 100644 index 83dbe38..0000000 --- a/data/media/css/gtk/meson.build +++ /dev/null @@ -1,96 +0,0 @@ -sassc = find_program('sassc', required: false) -if not sassc.found() and not get_option('sassc').disabled() - subproject('sassc') - sassc = find_program('sassc', required: get_option('sassc').enabled()) -endif - -if sassc.found() - sassc_opts = [ '-a', '-M', '-t', 'compact' ] - - style_deps = [ - custom_target('Stylesheet-adwaita', - input: 'Adwaita.scss', - output: 'Adwaita.css', - command: [ - sassc, sassc_opts, '@INPUT@', '@OUTPUT@', - ], - depend_files: files([ - '_definitions.scss', - '_drawing.scss', - '_recoloring.scss', - '_base.scss', - 'Adwaita.scss', - ]), - ), - custom_target('Stylesheet-adwaita-hc', - input: 'Adwaita-hc.scss', - output: 'Adwaita-hc.css', - command: [ - sassc, sassc_opts, '@INPUT@', '@OUTPUT@', - ], - depend_files: files([ - '_definitions.scss', - '_drawing.scss', - '_recoloring.scss', - '_base.scss', - 'Adwaita-hc.scss', - ]), - ), - custom_target('Stylesheet-adwaita-dark', - input: 'Adwaita-dark.scss', - output: 'Adwaita-dark.css', - command: [ - sassc, sassc_opts, '@INPUT@', '@OUTPUT@', - ], - depend_files: files([ - '_definitions.scss', - '_drawing.scss', - '_recoloring.scss', - '_base.scss', - 'Adwaita-dark.scss' - ]), - ), - custom_target('Stylesheet-adwaita-dark-hc', - input: 'Adwaita-dark-hc.scss', - output: 'Adwaita-dark-hc.css', - command: [ - sassc, sassc_opts, '@INPUT@', '@OUTPUT@', - ], - depend_files: files([ - '_definitions.scss', - '_drawing.scss', - '_recoloring.scss', - '_base.scss', - 'Adwaita-dark-hc.scss' - ]), - ), - custom_target('Stylesheet-adwaita-sepia', - input: 'Adwaita-sepia.scss', - output: 'Adwaita-sepia.css', - command: [ - sassc, sassc_opts, '@INPUT@', '@OUTPUT@', - ], - depend_files: files([ - '_definitions.scss', - '_drawing.scss', - '_recoloring.scss', - '_base.scss', - 'Adwaita.scss' - ]), - ), - custom_target('Stylesheet-adwaita-sepia-hc', - input: 'Adwaita-sepia-hc.scss', - output: 'Adwaita-sepia-hc.css', - command: [ - sassc, sassc_opts, '@INPUT@', '@OUTPUT@', - ], - depend_files: files([ - '_definitions.scss', - '_drawing.scss', - '_recoloring.scss', - '_base.scss', - 'Adwaita-hc.scss' - ]), - ), - ] -endif diff --git a/data/media/css/gtk/style-dark.css b/data/media/css/gtk/style-dark.css new file mode 100644 index 0000000..6b0c842 --- /dev/null +++ b/data/media/css/gtk/style-dark.css @@ -0,0 +1,2 @@ +@define-color view_bg_color #2d2d2d; +@define-color view_fg_color #eeeeec; \ No newline at end of file diff --git a/data/media/css/gtk/style-sepia.css b/data/media/css/gtk/style-sepia.css new file mode 100644 index 0000000..b274f95 --- /dev/null +++ b/data/media/css/gtk/style-sepia.css @@ -0,0 +1,13 @@ +@define-color window_bg_color #f4e8d5; +@define-color window_fg_color #4F3915; + +@define-color view_bg_color #F9F3E9; +@define-color view_fg_color @window_fg_color; + +@define-color card_bg_color @view_bg_color; +@define-color card_fg_color @view_fg_color; + +@define-color popover_bg_color @view_bg_color; +@define-color popover_fg_color @view_fg_color; + +@define-color code_bg_color mix(@view_bg_color, @view_fg_color, 0.15); \ No newline at end of file diff --git a/data/media/css/gtk/style.css b/data/media/css/gtk/style.css new file mode 100644 index 0000000..36a6c3d --- /dev/null +++ b/data/media/css/gtk/style.css @@ -0,0 +1,219 @@ +/*@define-color code_theme_selected_bg_color mix(#{$base_color}, #{$theme_selected_fg_color}, 0.15);*/ + +@define-color view_bg_color #FFFFFF; +@define-color view_fg_color #2e3436; + +@define-color headerbar_bg_color @view_bg_color; +@define-color code_bg_color mix(@window_bg_color, @view_fg_color, 0.15); + +/* Main window and text colors */ + +.apostrophe-window headerbar { + background: @view_bg_color; + color: @window_fg_color; + box-shadow: none; + transition: box-shadow 0.3s ease-in-out; +} + +.apostrophe-window.scrolled headerbar { + box-shadow: inset 0 -1px @borders; +} + +.apostrophe-window searchbar > revealer > box{ + background: @view_bg_color; + color: @window_fg_color; +} + +#titlebar-revealer { + padding: 0; +} + +.apostrophe-editor { + font-family: 'Fira Mono', monospace; + font-size: 1.091em; + /*text-decoration-color: @error_color; + background: @base_color; + color: @theme_selected_fg_color; + caret-color: @theme_selected_fg_color;*/ +} + +.apostrophe-editor.size14 { + font-size: 0.955em; +} + +.apostrophe-editor.size15 { + font-size: 1.023em; +} + +.apostrophe-editor.size16 { + font-size: 1.091em; +} + +.apostrophe-editor.size17 { + font-size: 1.159em; +} + +.apostrophe-editor.size18 { + font-size: 1.227em; +} + +.apostrophe-editor.size20 { + font-size: 1.364em; +} + +.apostrophe-editor.size22 { + font-size: 1.5em; +} + +.apostrophe-editor.size24 { + font-size: 1.636em; +} + + +.stats-button button{ + color: alpha(@theme_fg_color, 0.7); + background-color: alpha(@view_bg_color, 0.8); + transition: 100ms ease-in; + + border-radius: 6px; +} + +.stats-button button:hover, +.stats-button button:checked { + color: @theme_text_color; + background-color: mix(@theme_fg_color, @view_bg_color, 0.7); +} + +.lexikon { + font-family: serif; + font-size: 12px; + background: @theme_selected_bg_color; + border: 4px solid @theme_selected_bg_color; +} + +.lexikon .header { + font-size: 14px; + padding-top: 16px; + padding-bottom: 4px; + font-weight: bold; +} + +.lexikon .header .header.first { + padding-top: 0px; +} + +.lexikon .number { + padding-left: 16px; + padding-right: 4px; +} + +.quick-preview-popup { + background-color: @theme_selected_bg_color; + padding: 8px 12px 8px 12px; +} + +.quick-preview-popup grid { + background-color: @theme_selected_bg_color; + color: @theme_selected_fg_color; + border-color: @theme_selected_bg_color; +} + +.quick-preview-popup label { + color: @theme_selected_fg_color; +} + +/* theme selector */ + +.themeswitcher { + margin: 9px; +} +.themeswitcher checkbutton { + padding: 0; + min-height: 44px; + min-width: 44px; + padding: 1px; + background-clip: content-box; + border-radius: 9999px; + box-shadow: inset 0 0 0 1px @borders; +} +.themeswitcher checkbutton.system { + background: linear-gradient(-45deg, #2d2d2d 49.99%, white 50.01%); +} +.themeswitcher checkbutton.light { + background-color: white; +} +.themeswitcher checkbutton.sepia { + background-color: #F0E8DD; +} +.themeswitcher checkbutton.dark { + background-color: #2d2d2d; +} + +.themeswitcher checkbutton.light:checked, +.themeswitcher checkbutton.dark:checked, +.themeswitcher checkbutton.sepia:checked, +.themeswitcher checkbutton.system:checked { + box-shadow: inset 0 0 0 2px @theme_selected_bg_color; +} + +.themeswitcher checkbutton radio { + -gtk-icon-source: none; + border: none; + background: none; + box-shadow: none; + min-width: 12px; + min-height: 12px; + transform: translate(27px, 14px); + padding: 2px; +} +.themeswitcher checkbutton radio:checked{ + -gtk-icon-source: -gtk-icontheme("object-select-symbolic"); + background-color: @theme_selected_bg_color; + color: @theme_selected_fg_color; +} + + +.preview_button_left:checked{ + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + border-right-style: none; +} + +.preview_button_right button{ + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +/* Recents */ +.open-popover contents { + padding: 0; +} + +.open-popover list { + background: none; + margin-bottom: 3px; +} + +.open-popover list label.placeholder { + min-height: 57px; +} + +.open-popover list row { + border-radius: 9px; + margin: 3px 6px; +} + +.open-popover list row:first-child { + margin-top: 6px; +} + +.open-popover list row button { + padding: 3px; + margin: 0; + min-height: 24px; + min-width: 24px; +} + +.open-popover separator { + margin-bottom: 0; +} \ No newline at end of file diff --git a/data/meson.build b/data/meson.build index 81433ab..42918c1 100644 --- a/data/meson.build +++ b/data/meson.build @@ -94,7 +94,6 @@ install_subdir( install_dir: pkgdatadir ) -subdir('media/css/gtk') install_subdir( 'media', # exclude_directories: 'css/gtk' @@ -116,5 +115,5 @@ resources = gnome.compile_resources( gresource_bundle: true, install:true, install_dir: pkgdatadir, - dependencies: [ui_dependencies, style_deps] + dependencies: [ui_dependencies] ) diff --git a/data/org.gnome.gitlab.somas.Apostrophe.gschema.xml b/data/org.gnome.gitlab.somas.Apostrophe.gschema.xml index 6624214..8f62234 100644 --- a/data/org.gnome.gitlab.somas.Apostrophe.gschema.xml +++ b/data/org.gnome.gitlab.somas.Apostrophe.gschema.xml @@ -87,6 +87,13 @@ Whether the user can delete text or not. + + 0 + Hemingway Toast Count + + Number of times the Hemingway Toast has been shown + + "full-width" Preview mode diff --git a/data/ui/AboutHemingway.ui b/data/ui/AboutHemingway.ui new file mode 100644 index 0000000..cd256d1 --- /dev/null +++ b/data/ui/AboutHemingway.ui @@ -0,0 +1,16 @@ + + + + + + Hemingway Mode + The Hemingway Mode mimics the experience of writing on a typewriter, not allowing you to delete any text or doing any kind of editing. + +Only being able to move forward may be frustrating, but can be an interesting exercise for improving your writing skills, gaining focus or facing the task on hand with a different mindset. + + cancel + + _Close + + + \ No newline at end of file diff --git a/data/ui/Headerbar.ui b/data/ui/Headerbar.ui index 6e26c72..051f682 100644 --- a/data/ui/Headerbar.ui +++ b/data/ui/Headerbar.ui @@ -1,512 +1,149 @@ - - - - - - 1 - - - 1 - 1 - 1 - - - - - 1 - 1 - 1 - - - 1 - - - - - - - 1 - view-restore-symbolic - - - 1 - document-new-symbolic - - - 1 - system-search-symbolic - - - 1 - pan-down-symbolic - + + + - - - - - False - - - True - False - 12 - 12 - 12 - 12 - vertical - - - True - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - True - True - True - app.new_window - New Window - - - False - True - 2 - - - - - True - False - - - False - True - 3 - - - - - True - True - True - win.hemingway_mode - Hemingway Mode - - - False - True - 4 - - - - - True - True - True - win.focus_mode - Focus Mode - - - False - True - 5 - - - - - True - False - - - False - True - 6 - - - - - True - True - True - win.find_replace - Find and Replace - - - False - True - 7 - - - - - True - False - - - False - True - 8 - - - - - True - True - True - app.preferences - Preferences - - - False - True - 9 - - - - - True - False - - - False - True - 10 - - - - - True - True - True - win.open_file - Open Tutorial - - - False - True - 11 - - - - - True - True - True - app.shortcuts - Keyboard Shortcuts - - - False - True - 12 - - - - - True - True - True - app.about - About Apostrophe - - - False - True - 13 - - - - - + - + +
+ + themeswitcher + +
+
+ + _Hemingway Mode + win.hemingway_mode + + + _Focus Mode + win.focus_mode + +
+
+ + Find and _Replace + win.find_replace + +
+
+ + _Preferences + app.preferences + +
+
+ + Open _Tutorial + win.open_file + resource:///org/gnome/gitlab/somas/Apostrophe/media/apostrophe_markdown.md + + + _Keyboard Shortcuts + app.shortcuts + + + _About Apostrophe + app.about + +
+
- - False - - - True - False - 12 - vertical - - - True - True - True - win.save_as - Save As… - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - True - True - True - win.export - "pdf" - PDF - - - False - True - 2 - - - - - True - True - True - win.export - "html" - HTML - - - False - True - 3 - - - - - True - True - True - win.export - "odt" - ODT - - - False - True - 4 - - - - - True - False - - - False - True - 5 - - - - - True - True - True - win.advanced_export - Advanced Export… - - - False - True - 6 - - - - - True - False - - - False - True - 7 - - - - - True - True - True - win.copy_html - Copy HTML - - - False - True - 8 - - - - - + + + +
+ + _Save As... + win.save_as + +
+
+ + _PDF + win.export + "pdf" + + + _HTML + win.export + "html" + + + _ODT + win.export + "odt" + +
+
+ + Advanced _Export… + win.advanced_export + +
+
+ + _Copy HTML + app.copy_html + +
+
diff --git a/data/ui/PreviewLayoutSwitcher.ui b/data/ui/PreviewLayoutSwitcher.ui index 119a2ff..b5f06d5 100644 --- a/data/ui/PreviewLayoutSwitcher.ui +++ b/data/ui/PreviewLayoutSwitcher.ui @@ -1,82 +1,50 @@ - + - - True - False - view-dual-symbolic - - False - - + + - True none - + - + diff --git a/data/ui/PreviewLayoutSwitcherItem.ui b/data/ui/PreviewLayoutSwitcherItem.ui index 62b1b9e..51d0fcb 100644 --- a/data/ui/PreviewLayoutSwitcherItem.ui +++ b/data/ui/PreviewLayoutSwitcherItem.ui @@ -1,23 +1,16 @@ - + - \ No newline at end of file + diff --git a/data/ui/TextView.ui b/data/ui/TextView.ui index 120b42e..40257b9 100644 --- a/data/ui/TextView.ui +++ b/data/ui/TextView.ui @@ -1,26 +1,70 @@ - + - - - + + + \ No newline at end of file diff --git a/data/ui/ThemeSwitcher.ui b/data/ui/ThemeSwitcher.ui index fc00b72..4f23bb8 100644 --- a/data/ui/ThemeSwitcher.ui +++ b/data/ui/ThemeSwitcher.ui @@ -1,134 +1,57 @@ + diff --git a/data/ui/Window.ui b/data/ui/Window.ui index 3f49473..9cf4096 100644 --- a/data/ui/Window.ui +++ b/data/ui/Window.ui @@ -1,171 +1,132 @@ - - - - 1 - pan-down-symbolic - 2 - -