summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in4
-rw-r--r--data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in8
-rw-r--r--po/POTFILES.in10
-rw-r--r--po/bowl.pot207
-rw-r--r--po/ru.po261
-rw-r--r--src/components/preferences.rs21
-rw-r--r--src/components/smart_summary.rs45
7 files changed, 343 insertions, 213 deletions
diff --git a/data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in b/data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in
index 4c94072..9681bfe 100644
--- a/data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in
+++ b/data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in
@@ -5,8 +5,8 @@ Type=Application
 Exec=bowl
 Terminal=false
 Categories=GNOME;GTK;Network;
-# 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! The list MUST also end with a semicolon!
 Keywords=Micropub;IndieWeb;Kittybox;
-# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+# TRANSLATORS: Do NOT translate or transliterate this text (this is an icon file name)!
 Icon=@icon@
 StartupNotify=true
\ No newline at end of file
diff --git a/data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in b/data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in
index 4cec9d1..1037063 100644
--- a/data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in
+++ b/data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in
@@ -20,6 +20,14 @@
         ]]>
       </description>
     </key>
+    <key name="smart-summary-show-warning" type="b">
+      <default>true</default>
+      <summary>Show warnings on LLM enhancement features</summary>
+      <description>
+        If enabled, will show warnings regarding LLM enhancement
+        features.
+      </description>
+    </key>
     <key name="smart-summary-system-prompt" type="s">
       <default>"You are a helpful AI assistant embedded into a blog authoring tool. You will be provided with a text to summarize. Reply only, strictly with a one-sentence summary of the provided text, and don't write anything else."</default>
       <summary>LLM system prompt</summary>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index d7868d7..e043d0a 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,4 +1,5 @@
 data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in
+data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in
 
 ### Below are rust files containing translatable strings.
 ###
@@ -8,11 +9,6 @@ data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in
 # src/components/post_editor.rs
 # src/components/signin.rs
 # src/components/smart_summary.rs
-###
 ### To properly use `xtr`, do:
-###
-### $ xtr -o /dev/stdout src/lib.rs | cat >> po/bowl.pot
-###
-### because xtr truncates the file descriptor it writes to.
-###
-### Perhaps it would be better to produce a proper workflow for regenerating this .pot file.
\ No newline at end of file
+### $ xtr -o rust.pot src/lib.rs
+### And then use `msgcat` to merge it into the existing `bowl.pot` file.
\ No newline at end of file
diff --git a/po/bowl.pot b/po/bowl.pot
index 8034d1d..3fc227e 100644
--- a/po/bowl.pot
+++ b/po/bowl.pot
@@ -6,7 +6,7 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: bowl\n"
+"Project-Id-Version: bowl 1.2.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2024-09-04 15:59+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
@@ -17,7 +17,7 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in:3 src/lib.rs:187
+#: data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in:3 src/lib.rs:408
 msgid "Bowl"
 msgstr ""
 
@@ -25,174 +25,207 @@ msgstr ""
 msgid "Minimalist Micropub post creator"
 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! The list MUST also end with a semicolon!
 #: data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in:10
 msgid "Micropub;IndieWeb;Kittybox;"
 msgstr ""
 
-#. TRANSLATORS: please keep the newline and `<b>` tags
-#: src/components/smart_summary.rs:47
-msgid ""
-"<b>Smart Summary</b>\n"
-"Ask a language model for a single-sentence summary."
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:6
+msgid "LLM API endpoint"
 msgstr ""
 
-#: src/components/post_editor.rs:142
-msgid "Name"
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:7
+msgid "Ollama API endpoint used to query an LLM for Smart Summary."
 msgstr ""
 
-#: src/components/post_editor.rs:157
-msgid "Summary"
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:13
+msgid "Smart Summary LLM"
 msgstr ""
 
-#: src/components/post_editor.rs:179
-msgid "Tags"
+#. TRANSLATORS: please keep the link intact
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:15
+msgid ""
+"The model that Ollama will load to produce summaries. Available models can "
+"be seen at <a href=\"https://ollama.com/library\">Ollama library</a>."
 msgstr ""
 
-#: src/components/post_editor.rs:227
-msgid "Content"
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:25
+msgid "Show warnings on LLM enhancement features"
 msgstr ""
 
-#: src/components/post_editor.rs:280
-msgid "Visibility"
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:26
+msgid "If enabled, will show warnings regarding LLM enhancement features."
 msgstr ""
 
-#: src/components/post_editor.rs:493
-msgid "Smart Summary error: {}"
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:33
+msgid "LLM system prompt"
 msgstr ""
 
-#: src/components/post_editor.rs:540
-msgid "Post submitted"
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:34
+msgid ""
+"The system prompt provided to the LLM. For best results, it should instruct "
+"the LLM to provide a one-sentence summary of the document it receives. The "
+"default system prompt is tested for Llama 3.1-8B and should work for posts "
+"written mainly in English. Performance with other languages is untested."
 msgstr ""
 
-#: src/components/post_editor.rs:541
-msgid "Open"
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:46
+msgid "Smart Summary prompt prefix"
 msgstr ""
 
-#: src/components/post_editor.rs:559
-msgid "Error sending post: {}"
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:47
+msgid ""
+"What the text is prefixed with when pasted into the LLM prompt. Something "
+"like \"Summarize this text:\" works well."
 msgstr ""
 
-#: src/components/signin.rs:91
-msgid "Thank you! This window can now be closed."
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:55
+msgid "Smart Summary prompt suffix"
 msgstr ""
 
-#: src/components/signin.rs:210 src/components/signin.rs:249
-msgid "Sign in"
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:56
+msgid "Append this to the prompt after the article text."
 msgstr ""
 
-#: src/components/signin.rs:215
+#. TRANSLATORS: please keep the newline and `<b>` tags
+#: src/components/smart_summary.rs:185
 msgid ""
-"Please sign in with your website to use Bowl.\n"
-"Your website needs to support IndieAuth and Micropub for this app to work."
+"<b>Smart Summary</b>\n"
+"Ask a language model for a single-sentence summary."
 msgstr ""
 
-#: src/components/signin.rs:245
-msgid "Talking to your website..."
+#: src/components/smart_summary.rs:235
+msgid "Show this warning next time"
 msgstr ""
 
-#: src/components/signin.rs:247
-msgid "Waiting for authorization..."
+#: src/components/smart_summary.rs:244
+msgid "LLMs can be deceiving"
 msgstr ""
 
-#: src/components/signin.rs:455
-msgid "state doesn't match what we remember, ceremony aborted"
+#: src/components/smart_summary.rs:245
+msgid ""
+"Language models inherently lack any sort of intelligence, understanding of "
+"the text they take or produce, or conscience to feel guilty for lying or "
+"deceiving their user.\n"
+"\n"
+"<b>Smart Summary</b> is only designed to generate draft-quality output that "
+"must be proof-read by a human before being posted."
 msgstr ""
 
-#: src/components/signin.rs:463
-msgid "issuer doesn't match what we remember, ceremony aborted"
+#: src/components/smart_summary.rs:253
+msgid "Cancel"
 msgstr ""
 
-#: src/lib.rs:131
-msgid "Bowl for Kittybox"
+#: src/components/smart_summary.rs:254
+msgid "Proceed"
 msgstr ""
 
-#: src/lib.rs:169
-msgid "Sign out"
+#: src/components/post_editor.rs:147
+msgid "Name"
 msgstr ""
 
-#: src/lib.rs:170
-msgid "Preferences"
+#: src/components/post_editor.rs:162
+msgid "Summary"
 msgstr ""
 
-#: src/lib.rs:171
-msgid "About"
+#: src/components/post_editor.rs:182
+msgid "Tags"
 msgstr ""
 
-#: src/lib.rs:185
-msgid "Bowl - Sign in with your website"
+#: src/components/post_editor.rs:218
+msgid "Content"
 msgstr ""
 
-#: src/lib.rs:201
-msgid "Publish"
+#: src/components/post_editor.rs:271
+msgid "Visibility"
 msgstr ""
 
-#: src/lib.rs:331
-msgid "Micropub access token for {}"
+#: src/components/post_editor.rs:450
+msgid "Smart Summary error: {}"
 msgstr ""
 
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:6
-msgid "LLM API endpoint"
+#: src/components/post_editor.rs:497
+msgid "Post submitted"
 msgstr ""
 
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:7
-msgid "Ollama API endpoint used to query an LLM for Smart Summary."
+#: src/components/post_editor.rs:498
+msgid "Open"
 msgstr ""
 
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:13
-msgid "Smart Summary LLM"
+#: src/components/post_editor.rs:516
+msgid "Error sending post: {}"
 msgstr ""
 
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:25
-msgid "LLM system prompt"
+#: src/components/signin.rs:151
+msgid "Thank you! This window can now be closed."
 msgstr ""
 
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:26
-msgid ""
-"The system prompt provided to the LLM. For best results, it should instruct "
-"the LLM to provide a one-sentence summary of the document it receives. The "
-"default system prompt is tested for Llama 3.1-8B and should work for posts "
-"written mainly in English. Performance with other languages is untested."
+#: src/components/signin.rs:270 src/components/signin.rs:309
+msgid "Sign in"
 msgstr ""
 
-#. TRANSLATORS: please keep the link intact
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:15
+#: src/components/signin.rs:275
 msgid ""
-"The model that Ollama will load to produce summaries. Available models can "
-"be seen at <a href=\"https://ollama.com/library\">Ollama library</a>."
+"Please sign in with your website to use Bowl.\n"
+"Your website needs to support IndieAuth and Micropub for this app to work."
 msgstr ""
 
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:38
-msgid "Smart Summary prompt prefix"
+#: src/components/signin.rs:305
+msgid "Talking to your website..."
 msgstr ""
 
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:39
-msgid ""
-"What the text is prefixed with when pasted into the LLM prompt. Something "
-"like \"Summarize this text:\" works well."
+#: src/components/signin.rs:307
+msgid "Waiting for authorization..."
 msgstr ""
 
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:47
-msgid "Smart Summary prompt suffix"
+#: src/components/signin.rs:431
+msgid "state doesn't match what we remember, ceremony aborted"
 msgstr ""
 
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:48
-msgid "Append this to the prompt after the article text."
+#: src/components/signin.rs:439
+msgid "issuer doesn't match what we remember, ceremony aborted"
 msgstr ""
 
-#: src/components/preferences.rs:21
+#: src/components/preferences.rs:31
 msgid "Language Models"
 msgstr ""
 
-#: src/components/preferences.rs:22
+#: src/components/preferences.rs:32
 msgid "Settings for the language model integrations."
 msgstr ""
 
-#: src/components/preferences.rs:26
+#: src/components/preferences.rs:37
 msgid "General"
 msgstr ""
 
-#: src/components/preferences.rs:33
+#: src/components/preferences.rs:46
 msgid "Smart Summary"
 msgstr ""
 
+#: src/lib.rs:77
+msgid "Micropub access token for {}"
+msgstr ""
+
+#: src/lib.rs:352
+msgid "Bowl for Kittybox"
+msgstr ""
+
+#: src/lib.rs:390
+msgid "Sign out"
+msgstr ""
+
+#: src/lib.rs:391
+msgid "Preferences"
+msgstr ""
+
+#: src/lib.rs:392
+msgid "About"
+msgstr ""
+
+#: src/lib.rs:406
+msgid "Bowl - Sign in with your website"
+msgstr ""
+
+#: src/lib.rs:422
+msgid "Publish"
+msgstr ""
diff --git a/po/ru.po b/po/ru.po
index b6df217..308f541 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -5,10 +5,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-09-01 18:35+0300\n"
-"PO-Revision-Date: 2024-09-01 18:36+0300\n"
+"Project-Id-Version: bowl 1.2.0\n"
+"Report-Msgid-Bugs-To: vika@fireburn.ru\n"
+"POT-Creation-Date: 2024-09-04 15:59+0300\n"
+"PO-Revision-Date: 2025-02-24 04:33+0300\n"
 "Last-Translator: Vika <vika@fireburn.ru>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
 "Language: ru\n"
@@ -18,7 +18,7 @@ msgstr ""
 "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"
 
-#: data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in:3 src/lib.rs:187
+#: data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in:3 src/lib.rs:408
 msgid "Bowl"
 msgstr "Bowl"
 
@@ -26,13 +26,83 @@ msgstr "Bowl"
 msgid "Minimalist Micropub post creator"
 msgstr "Минималистичная Micropub-утилита для написания постов в блог"
 
-#. 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! The list MUST also end with a semicolon!
 #: data/xyz.vikanezrimaya.kittybox.Bowl.desktop.in.in:10
 msgid "Micropub;IndieWeb;Kittybox;"
 msgstr "Micropub;IndieWeb;Kittybox;"
 
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:6
+msgid "LLM API endpoint"
+msgstr "Точка API LLM"
+
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:7
+msgid "Ollama API endpoint used to query an LLM for Smart Summary."
+msgstr ""
+"API Ollama, которое используется, чтобы сгенерировать Умную Выжимку с "
+"помощью языковой модели."
+
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:13
+msgid "Smart Summary LLM"
+msgstr "Модель для Умной Выжимки"
+
+#. TRANSLATORS: please keep the link intact
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:15
+msgid ""
+"The model that Ollama will load to produce summaries. Available models can "
+"be seen at <a href=\"https://ollama.com/library\">Ollama library</a>."
+msgstr ""
+"Языковая модель, которую Ollama использует для извлечения содержания текста."
+"Доступные модели можно увидеть в <a href=\"https://ollama.com/"
+"library\">библиотеке Ollama</a>."
+
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:25
+msgid "Show warnings on LLM enhancement features"
+msgstr "Показывать предупреждения о языковых моделях"
+
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:26
+msgid "If enabled, will show warnings regarding LLM enhancement features."
+msgstr "При включении приложение будет показывать предупреждения при "
+"использовании функций, задействующих языковые модели."
+
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:33
+msgid "LLM system prompt"
+msgstr "Системная вводная для LLM"
+
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:34
+msgid ""
+"The system prompt provided to the LLM. For best results, it should instruct "
+"the LLM to provide a one-sentence summary of the document it receives. The "
+"default system prompt is tested for Llama 3.1-8B and should work for posts "
+"written mainly in English. Performance with other languages is untested."
+msgstr ""
+"Системная вводная, которая будет передана языковой модели. Для достижения "
+"наилучших результатов она должна содержать в себе указание для модели — "
+"описать суть документа одним предложением. Вводная, указанная по умолчанию, "
+"протестирована для Llama 3.1-8B и лучше всего работает со статьями на "
+"английском. Результаты для других языков не гарантированы."
+
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:46
+msgid "Smart Summary prompt prefix"
+msgstr "Префикс вводной для Умной Выжимки"
+
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:47
+msgid ""
+"What the text is prefixed with when pasted into the LLM prompt. Something "
+"like \"Summarize this text:\" works well."
+msgstr ""
+"Что приписывается к началу текста для вводной языковой модели. Пример: "
+"\"Опиши смысл этого текста одним предложением:\""
+
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:55
+msgid "Smart Summary prompt suffix"
+msgstr "Суффикс вводной Умной Выжимки"
+
+#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:56
+msgid "Append this to the prompt after the article text."
+msgstr "Что приписывается к вводной после текста статьи."
+
 #. TRANSLATORS: please keep the newline and `<b>` tags
-#: src/components/smart_summary.rs:47
+#: src/components/smart_summary.rs:185
 msgid ""
 "<b>Smart Summary</b>\n"
 "Ask a language model for a single-sentence summary."
@@ -40,172 +110,147 @@ msgstr ""
 "<b>Умная Выжимка</b>\n"
 "Попросит языковую модель описать содержимое статьи в одном предложении."
 
-#: src/components/post_editor.rs:142
+#: src/components/smart_summary.rs:235
+msgid "Show this warning next time"
+msgstr "Показывать это предупреждение снова"
+
+#: src/components/smart_summary.rs:244
+msgid "LLMs can be deceiving"
+msgstr "Языковые модели могут вас обмануть"
+
+#: src/components/smart_summary.rs:245
+msgid ""
+"Language models inherently lack any sort of intelligence, understanding of "
+"the text they take or produce, or conscience to feel guilty for lying or "
+"deceiving their user.\n"
+"\n"
+"<b>Smart Summary</b> is only designed to generate draft-quality output that "
+"must be proof-read by a human before being posted."
+msgstr ""
+"Языковые модели по сути своей не имеют никакого разума, понимания текста, "
+"который они читают и пишут, а также чувства вины, предостерегающего её от "
+"обмана пользователя.\n"
+"\n"
+"<b>Умная Выжимка</b> может генерировать только черновик, который необходимо "
+"перепроверить перед использованием."
+
+#: src/components/smart_summary.rs:253
+msgid "Cancel"
+msgstr "Отмена"
+
+#: src/components/smart_summary.rs:254
+msgid "Proceed"
+msgstr "OK"
+
+#: src/components/post_editor.rs:147
 msgid "Name"
 msgstr "Название"
 
-#: src/components/post_editor.rs:157
+#: src/components/post_editor.rs:162
 msgid "Summary"
 msgstr "Содержание"
 
-#: src/components/post_editor.rs:179
+#: src/components/post_editor.rs:182
 msgid "Tags"
 msgstr "Тэги"
 
-#: src/components/post_editor.rs:227
+#: src/components/post_editor.rs:218
 msgid "Content"
 msgstr "Текст"
 
-#: src/components/post_editor.rs:280
+#: src/components/post_editor.rs:271
 msgid "Visibility"
 msgstr "Видимость"
 
-#: src/components/post_editor.rs:493
+#: src/components/post_editor.rs:450
 msgid "Smart Summary error: {}"
 msgstr "Ошибка Умной Выжимки: {}"
 
-#: src/components/post_editor.rs:540
+#: src/components/post_editor.rs:497
 msgid "Post submitted"
 msgstr "Статья отправлена"
 
-#: src/components/post_editor.rs:541
+#: src/components/post_editor.rs:498
 msgid "Open"
 msgstr "Открыть"
 
-#: src/components/post_editor.rs:559
+#: src/components/post_editor.rs:516
 msgid "Error sending post: {}"
 msgstr "Ошибка отправки статьи: {}"
 
-#: src/components/signin.rs:91
+#: src/components/signin.rs:151
 msgid "Thank you! This window can now be closed."
 msgstr "Благодарим Вас! Это окно можно закрыть."
 
-#: src/components/signin.rs:210 src/components/signin.rs:249
+#: src/components/signin.rs:270 src/components/signin.rs:309
 msgid "Sign in"
 msgstr "Войти"
 
-#: src/components/signin.rs:215
+#: src/components/signin.rs:275
 msgid ""
 "Please sign in with your website to use Bowl.\n"
 "Your website needs to support IndieAuth and Micropub for this app to work."
 msgstr ""
 "Пожалуйста, войдите со своим веб-сайтом, чтобы использовать Боул.\n"
-"Ваш веб-сайт должен поддерживать протоколы IndieAuth и Micropub для корректной работы приложения."
+"Ваш веб-сайт должен поддерживать протоколы IndieAuth и Micropub для "
+"корректной работы приложения."
 
-#: src/components/signin.rs:245
+#: src/components/signin.rs:305
 msgid "Talking to your website..."
 msgstr "Общаемся с Вашим веб-сайтом..."
 
-#: src/components/signin.rs:247
+#: src/components/signin.rs:307
 msgid "Waiting for authorization..."
 msgstr "Ждём авторизации..."
 
-#: src/components/signin.rs:455
+#: src/components/signin.rs:431
 msgid "state doesn't match what we remember, ceremony aborted"
 msgstr "поле state не совпадает с тем, что мы помним, церемония отменена"
 
-#: src/components/signin.rs:463
+#: src/components/signin.rs:439
 msgid "issuer doesn't match what we remember, ceremony aborted"
 msgstr "поле issuer не совпадает с тем, что мы помним, церемония отменена"
 
-#: src/lib.rs:131
+#: src/components/preferences.rs:31
+msgid "Language Models"
+msgstr "Языковые модели"
+
+#: src/components/preferences.rs:32
+msgid "Settings for the language model integrations."
+msgstr "Настройки интеграции языковых моделей."
+
+#: src/components/preferences.rs:37
+msgid "General"
+msgstr "Общее"
+
+#: src/components/preferences.rs:46
+msgid "Smart Summary"
+msgstr "Умная Выжимка"
+
+#: src/lib.rs:77
+msgid "Micropub access token for {}"
+msgstr "Токен доступа Micropub для {}"
+
+#: src/lib.rs:352
 msgid "Bowl for Kittybox"
 msgstr "Bowl для Kittybox"
 
-#: src/lib.rs:169
+#: src/lib.rs:390
 msgid "Sign out"
 msgstr "Выйти"
 
-#: src/lib.rs:170
+#: src/lib.rs:391
 msgid "Preferences"
 msgstr "Настройки"
 
-#: src/lib.rs:171
+#: src/lib.rs:392
 msgid "About"
 msgstr "О приложении"
 
-#: src/lib.rs:185
+#: src/lib.rs:406
 msgid "Bowl - Sign in with your website"
 msgstr "Bowl - Войдите со своим веб-сайтом"
 
-#: src/lib.rs:201
+#: src/lib.rs:422
 msgid "Publish"
 msgstr "Опубликовать"
-
-#: src/lib.rs:331
-msgid "Micropub access token for {}"
-msgstr "Токен доступа Micropub для {}"
-
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:6
-msgid "LLM API endpoint"
-msgstr "Точка API LLM"
-
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:7
-msgid "Ollama API endpoint used to query an LLM for Smart Summary."
-msgstr "API Ollama, которое используется, чтобы сгенерировать Умную Выжимку с помощью языковой модели."
-
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:13
-msgid "Smart Summary LLM"
-msgstr "Модель для Умной Выжимки"
-
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:22
-msgid "LLM system prompt"
-msgstr "Системная вводная для LLM"
-
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:23
-msgid ""
-"The system prompt provided to the LLM. For best results, it should instruct "
-"the LLM to provide a one-sentence summary of the document it receives. The "
-"default system prompt is tested for Llama 3.1-8B and should work for posts "
-"written mainly in English. Performance with other languages is untested."
-msgstr ""
-"Системная вводная, которая будет передана языковой модели. Для достижения "
-"наилучших результатов она должна содержать в себе указание для модели — "
-"описать суть документа одним предложением. Вводная, указанная по умолчанию, "
-"протестирована для Llama 3.1-8B и лучше всего работает со статьями на "
-"английском. Результаты для других языков не гарантированы."
-
-#. TRANSLATORS: please keep the link intact
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:15
-msgid ""
-"The model that Ollama will load to produce summaries. Available models can "
-"be seen at <a href=\"https://ollama.com/library\">Ollama library</a>."
-msgstr ""
-"Языковая модель, которую Ollama использует для извлечения содержания текста."
-"Доступные модели можно увидеть в <a href=\"https://ollama.com/library\">библиотеке Ollama</a>."
-
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:38
-msgid "Smart Summary prompt prefix"
-msgstr "Префикс вводной для Умной Выжимки"
-
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:39
-msgid ""
-"What the text is prefixed with when pasted into the LLM prompt. Something "
-"like \"Summarize this text:\" works well."
-msgstr "Что приписывается к началу текста для вводной языковой модели. Пример: "
-"\"Опиши смысл этого текста одним предложением:\""
-
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:47
-msgid "Smart Summary prompt suffix"
-msgstr "Суффикс вводной Умной Выжимки"
-
-#: data/xyz.vikanezrimaya.kittybox.Bowl.gschema.xml.in:48
-msgid "Append this to the prompt after the article text."
-msgstr "Что приписывается к вводной после текста статьи."
-
-#: src/components/preferences.rs:21
-msgid "Language Models"
-msgstr "Языковые модели"
-
-#: src/components/preferences.rs:22
-msgid "Settings for the language model integrations."
-msgstr "Настройки интеграции языковых моделей."
-
-#: src/components/preferences.rs:26
-msgid "General"
-msgstr "Общее"
-
-#: src/components/preferences.rs:33
-msgid "Smart Summary"
-msgstr "Умная Выжимка"
-
diff --git a/src/components/preferences.rs b/src/components/preferences.rs
index 09fbdf7..f1f37f9 100644
--- a/src/components/preferences.rs
+++ b/src/components/preferences.rs
@@ -13,7 +13,8 @@ struct LanguageModelPreferencesWidgets {
 
     general_group: adw::PreferencesGroup,
     llm_endpoint: adw::EntryRow,
-
+    smart_summary_show_warning: adw::SwitchRow,
+    
     smart_summary_group: adw::PreferencesGroup,
     smart_summary_model: adw::EntryRow,
     smart_summary_system_prompt: adw::EntryRow,
@@ -36,7 +37,9 @@ impl LanguageModelPreferencesWidgets {
             .title(gettext("General"))
             .build();
         let llm_endpoint = adw::EntryRow::new();
+        let smart_summary_show_warning = adw::SwitchRow::new();
         general_group.add(&llm_endpoint);
+        general_group.add(&smart_summary_show_warning);
         page.add(&general_group);
 
         let smart_summary_group = adw::PreferencesGroup::builder()
@@ -57,6 +60,7 @@ impl LanguageModelPreferencesWidgets {
 
             general_group,
             llm_endpoint,
+            smart_summary_show_warning,
 
             smart_summary_group,
             smart_summary_model,
@@ -67,14 +71,15 @@ impl LanguageModelPreferencesWidgets {
 
         let schema = settings.settings_schema().unwrap();
 
-        for (row, key) in [
-            (&widgets.llm_endpoint, "llm-endpoint"),
-            (&widgets.smart_summary_model, "smart-summary-model"),
-            (&widgets.smart_summary_system_prompt, "smart-summary-system-prompt"),
-            (&widgets.smart_summary_prompt_prefix, "smart-summary-prompt-prefix"),
-            (&widgets.smart_summary_prompt_suffix, "smart-summary-prompt-suffix"),
+        for (row, key, property) in [
+            (widgets.llm_endpoint.upcast_ref::<adw::PreferencesRow>(), "llm-endpoint", "text"),
+            (widgets.smart_summary_show_warning.upcast_ref::<_>(), "smart-summary-show-warning", "active"),
+            (widgets.smart_summary_model.upcast_ref::<_>(), "smart-summary-model", "text"),
+            (widgets.smart_summary_system_prompt.upcast_ref::<_>(), "smart-summary-system-prompt", "text"),
+            (widgets.smart_summary_prompt_prefix.upcast_ref::<_>(), "smart-summary-prompt-prefix", "text"),
+            (widgets.smart_summary_prompt_suffix.upcast_ref::<_>(), "smart-summary-prompt-suffix", "text"),
         ] {
-            settings.bind(key, row, "text")
+            settings.bind(key, row, property)
                 .get()
                 .set()
                 .build();
diff --git a/src/components/smart_summary.rs b/src/components/smart_summary.rs
index 67419cb..5b98186 100644
--- a/src/components/smart_summary.rs
+++ b/src/components/smart_summary.rs
@@ -152,6 +152,7 @@ pub(crate) enum Error {
 #[derive(Debug)]
 pub(crate) enum Input {
     #[doc(hidden)] ButtonPressed,
+    #[doc(hidden)] WarningAccepted,
     Text(String),
     Cancel,
 }
@@ -224,7 +225,49 @@ impl Component for SmartSummaryButton {
                     log::warn!("Parent component asked us to cancel, but we're not running a task.");
                 }
             },
-            Input::ButtonPressed => if let Ok(()) = sender.output(Output::Start) {
+            Input::ButtonPressed => {
+                let settings = gio::Settings::new(crate::APPLICATION_ID);
+                if !settings.get::<bool>("smart-summary-show-warning") {
+                    return self.update(Input::WarningAccepted, sender, _root);
+                } else {
+                    // TODO: show warning dialog
+                    let skip_warning_checkbox = gtk::CheckButton::with_label(
+                        &gettext("Show this warning next time")
+                    );
+
+                    settings.bind(
+                        "smart-summary-show-warning",
+                        &skip_warning_checkbox, "active"
+                    ).get().set().build();
+
+                    let dialog = adw::AlertDialog::builder()
+                        .heading(gettext("LLMs can be deceiving"))
+                        .body(gettext("Language models inherently lack any sort of intelligence, understanding of the text they take or produce, or conscience to feel guilty for lying or deceiving their user.
+
+<b>Smart Summary</b> is only designed to generate draft-quality output that must be proof-read by a human before being posted."))
+                        .body_use_markup(true)
+                        .default_response("continue")
+                        .extra_child(&skip_warning_checkbox)
+                        .build();
+                    dialog.add_responses(&[
+                        ("close", &gettext("Cancel")),
+                        ("continue", &gettext("Proceed"))
+                    ]);
+                    dialog.choose(
+                        &_root.root().unwrap(),
+                        None::<&gio::Cancellable>,
+                        glib::clone!(
+                            #[strong] sender,
+                            move |res| match res.as_str() {
+                                "continue" => {
+                                    sender.input(Input::WarningAccepted);
+                                },
+                                _ => {},
+                            }
+                        ))
+                }
+            },
+            Input::WarningAccepted => if let Ok(()) = sender.output(Output::Start) {
                 self.waiting = true;
                 log::debug!("Requesting text to summarize from parent component...");
                 // TODO: set timeout in case parent component never replies