diff --git a/fluxer_app/src/features/app/hooks/useDesktopElectronBridges.tsx b/fluxer_app/src/features/app/hooks/useDesktopElectronBridges.tsx index d4c9678f1..a2c14afa8 100644 --- a/fluxer_app/src/features/app/hooks/useDesktopElectronBridges.tsx +++ b/fluxer_app/src/features/app/hooks/useDesktopElectronBridges.tsx @@ -5,6 +5,7 @@ import {isClientBooting} from '@app/features/app/state/ClientReadiness'; import Authentication from '@app/features/auth/state/Authentication'; import {initializeDesktopTrayBridge} from '@app/features/platform/utils/DesktopTrayBridge'; import ThemeLibrary from '@app/features/theme/state/ThemeLibrary'; +import {broadcastThemeStudioMessage} from '@app/features/theme_studio/state/ThemeStudioBroadcast'; import * as ModalCommands from '@app/features/ui/commands/ModalCommands'; import {getElectronAPI} from '@app/features/ui/utils/NativeUtils'; import {useEffect} from 'react'; @@ -15,6 +16,9 @@ export function useDesktopElectronBridges(): void { void ThemeLibrary.init(); const electronApi = getElectronAPI(); if (!electronApi) return; + const disposeLinkedFileSync = ThemeLibrary.startLinkedFileSync({ + onThemesChanged: () => broadcastThemeStudioMessage({type: 'themeLibrary', revision: ThemeLibrary.revision}), + }); const unsubZoomIn = electronApi.onZoomIn?.(() => void Accessibility.adjustZoom(1)); const unsubZoomOut = electronApi.onZoomOut?.(() => void Accessibility.adjustZoom(-1)); const unsubZoomReset = electronApi.onZoomReset?.(() => Accessibility.updateSettings({zoomLevel: 1.0})); @@ -36,6 +40,7 @@ export function useDesktopElectronBridges(): void { unsubZoomReset?.(); unsubOpenSettings?.(); disposeTrayBridge?.(); + disposeLinkedFileSync(); }; }, []); } diff --git a/fluxer_app/src/features/i18n/locales/ar/messages.po b/fluxer_app/src/features/i18n/locales/ar/messages.po index 882dbeaff..ee8d23669 100644 --- a/fluxer_app/src/features/i18n/locales/ar/messages.po +++ b/fluxer_app/src/features/i18n/locales/ar/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, zero {# تطبيق محدد لإلغاء الوصول} one {تطبيق واحد محدد لإلغاء الوصول} two {تطبيقان محددان لإلغاء الوصول} few {# تطبيقات محددة لإلغاء الوصول} many {# تطبيقًا محددًا لإلغاء الوصول} other {# تطبيق محدد لإلغاء الوصول}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "لا يمكن لـ {appName} الوصول إلى خوادمه. سيستمر في المحاولة في الخلفية." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "تعذّر بدء تشغيل {appName}" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, zero {# قناة نصية} one {قناة نصية واحدة} two {قناتان نصيتان} few {# قنوات نصية} many {# قناة نصية} other {# قناة نصية}}، {voiceChannelCount, plural, zero {# قناة صوتية} one {قناة صوتية واحدة} two {قناتان صوتيتان} few {# قنوات صوتية} many {# قناة صوتية} other {# قناة صوتية}}، {categoryCount, plural, zero {# فئة} one {فئة واحدة} two {فئتان} few {# فئات} many {# فئة} other {# فئة}}، {roleCount, plural, zero {# دور} one {دور واحد} two {دوران} few {# أدوار} many {# دورًا} other {# دور}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "نسخة من {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "رمز المصادقة" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "المؤلف" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "لا يمكنك الوصول إلى هذا البريد الإلكتروني؟" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "تعذر الاتصال" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "تعذر العثور على {path}. جارٍ استخدام آخر إصدار تم تحميله." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "لا يمكن لصق الصورة هنا" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "تعذر قراءة {path}. جارٍ استخدام آخر إصدار تم تحميله." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "قريبًا" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "مفصولة بفواصل" @@ -10817,6 +10827,11 @@ msgstr "جاري قص {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "ملفات CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "ديلاوير" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "هل تريد حذف الفئة \"{categoryName}\"؟ لا يمكن التراجع عن هذا الإجراء." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "حذف السمة" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "حذف السمة؟" @@ -13231,7 +13246,7 @@ msgstr "نظرًا لقوانين المحتوى للبالغين في {regionNa msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "نظرًا لقوانين المحتوى للبالغين في {regionName}، فإن هذه الوسائط غير متاحة في منطقتك الحالية." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "تكرار" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "تمكين إذن {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "تمكين {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "استكشاف المجتمعات" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "تصدير" @@ -14885,7 +14900,7 @@ msgstr "تصدير كل رسالة أرسلتها على الإطلاق، بال msgid "Export GIF URLs" msgstr "تصدير روابط GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "تصدير المكتبة" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "استيراد قالب {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "استورد ملف ‎.css للبدء، أو الصق CSS الخاص بك في CSS السريع." @@ -18086,7 +18101,9 @@ msgstr "اكتمل الاستيراد. تمت إضافة {importedCount, plural, msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "اكتمل الاستيراد. تمت إضافة {importedCount, plural, zero {# صورة GIF} one {صورة GIF واحدة} two {صورتا GIF} few {# صور GIF} many {# صورة GIF} other {# صورة GIF}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "استيراد CSS" @@ -18098,7 +18115,7 @@ msgstr "استيراد صور GIF المفضلة" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "استيراد مجلد" @@ -18107,7 +18124,7 @@ msgstr "استيراد مجلد" msgid "Import GIFs" msgstr "استيراد صور GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "استيراد مكتبة" @@ -18150,13 +18167,13 @@ msgstr "معلومات هامة:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "تم استيراد {length, plural, zero {# ملف سمة} one {ملف سمة واحد} two {ملفا سمة} few {# ملفات سمات} many {# ملف سمة} other {# ملف سمة}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "تم استيراد {themes, plural, zero {# سمة} one {سمة واحدة} two {سمتان} few {# سمات} many {# سمة} other {# سمة}} و{assets, plural, zero {# أصل} one {أصل واحد} two {أصلان} few {# أصول} many {# أصلًا} other {# أصل}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "جارٍ تثبيت تحديث سطح المكتب…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "مراسلة فورية واتصال صوتي عبر الإنترنت" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "مراسلة فورية" @@ -19903,6 +19920,13 @@ msgstr "اربط حسابات ونطاقات خارجية بملفك الشخص msgid "Link external accounts and domains to your profile" msgstr "ربط الحسابات والنطاقات الخارجية بملفك الشخصي" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "ربط ملف" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "اربط حسابك على {BLUESKY_PROVIDER_NAME} أو تحقق من م msgid "Linked" msgstr "مرتبط" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "ملفات الثيمات المرتبطة {length, plural, one {# ملف ثيم} other {# ملف ثيم}}. التغييرات التي تحفظها عليها تُطبّق فورًا." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "الحسابات المرتبطة" msgid "Linked devices" msgstr "الأجهزة المرتبطة" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "الملف المرتبط غير متاح" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "مرتبط بـ {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "مرتبط بـ {path}. قم بتحرير الملف في أي محرر وستطبق التغييرات المحفوظة هنا على الفور." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "مرتبط بملف" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "تجاوزات شريط التنبيه" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "لا يوجد محتوى نصي" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "لم يتم تحديد سمة." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "لا توجد سمات مطابقة لبحثك." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "لم يتم حفظ أي سمات بعد." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "اختر مزود البحث العكسي عن الصور" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "اختر سمة من اليسار لتعديل اسمها وبياناتها الوصفية وCSS الخاص بها. أو استورد سمة جديدة." @@ -27320,7 +27369,7 @@ msgstr "إزالة من الوسائط المحفوظة" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "إلغاء إبقاء النافذة في المقدمة" @@ -28959,7 +29008,7 @@ msgstr "حفظ الأيقونة" msgid "Save some media from messages to get started!" msgstr "احفظ بعض الوسائط من الرسائل لتبدأ!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "حفظ السمة" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "البحث في الويب" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "البحث عن السمات…" @@ -32504,7 +32553,7 @@ msgstr "إبقاء التطبيق تفاعليًا بالكامل عند فقد #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "إبقاء النافذة في المقدمة" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "العلامة" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "الوسوم" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "لون السمة" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS السمة" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "السمة غير موجودة" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "تم حفظ السمة." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "سيؤدي هذا إلى استرداد فاتورتك الأخيرة وإلغاء أي اشتراك مرتبط بها. لن تتمكن من استرداد المبلغ بنفسك مرة أخرى لمدة 30 يومًا." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "سيؤدي هذا إلى إزالة \"{themeName}\" من هذا الجهاز." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "تم مسح النطاقات الموثوقة." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "جرّب اسمًا مختلفًا أو امسح البحث." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "إلغاء الربط" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "شارة الرسائل غير المقروءة" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "رسائل غير مقروءة" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "رسائل غير مقروءة: {count}" @@ -36807,7 +36861,7 @@ msgstr "رسائل غير مقروءة: {count}" msgid "Unreads" msgstr "غير المقروءة" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "تغييرات غير محفوظة" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "فيرمونت" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "الإصدار" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "تعذر إعادة توجيه الرسالة في الوقت الحالي." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "تعذر استيراد ملف مكتبة السمات هذا." diff --git a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json index 0fb851f22..a107a091e 100644 --- a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json +++ b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json @@ -1608,9 +1608,18 @@ { "msgid": "By purchasing, you agreed to our {legalDocument}." }, + { + "msgid": "CSS files" + }, { "msgid": "Camera access is needed for device previews" }, + { + "msgid": "Can't find {path}. Using the last loaded version." + }, + { + "msgid": "Can't read {path}. Using the last loaded version." + }, { "msgid": "Cancel price change" }, @@ -2310,6 +2319,24 @@ { "msgid": "Link a new device" }, + { + "msgid": "Link file" + }, + { + "msgid": "Linked file unavailable" + }, + { + "msgid": "Linked to a file" + }, + { + "msgid": "Linked to {path}." + }, + { + "msgid": "Linked to {path}. Edit the file in any editor and saved changes apply here right away." + }, + { + "msgid": "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." + }, { "msgid": "Loading instance configuration" }, @@ -3552,6 +3579,9 @@ { "msgid": "Unfollow {name}?" }, + { + "msgid": "Unlink" + }, { "msgid": "Unread channels" }, diff --git a/fluxer_app/src/features/i18n/locales/bg/messages.po b/fluxer_app/src/features/i18n/locales/bg/messages.po index d86f84166..5262c5513 100644 --- a/fluxer_app/src/features/i18n/locales/bg/messages.po +++ b/fluxer_app/src/features/i18n/locales/bg/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# избрано приложение за отнемане на достъп} other {# избрани приложения за отнемане на достъп}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} не може да се свърже със сървърите си. Ще продължи да опитва във фонов режим." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} не успя да стартира" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# текстов канал} other {# текстови канала}}, {voiceChannelCount, plural, one {# гласов канал} other {# гласови канала}}, {categoryCount, plural, one {# категория} other {# категории}}, {roleCount, plural, one {# роля} other {# роли}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Копие на {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Код за удостоверяване" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Автор" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Нямаш достъп до този имейл?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Не може да се свърже" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Не може да се намери {path}. Използва се последната заредена версия." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Тук не можеш да поставяш изображения" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Не може да се прочете {path}. Използва се последната заредена версия." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Скоро" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "разделени, със, запетая" @@ -10817,6 +10827,11 @@ msgstr "Обработване на {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS файлове" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Делауер" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Изтриване на категорията „{categoryName}“? Това действие не може да бъде отменено." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Изтриване на тема" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Изтриване на тема?" @@ -13231,7 +13246,7 @@ msgstr "Поради законите за съдържание за възра msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Поради законите за съдържание за възрастни в {regionName}, този медиен файл не е наличен в текущия ти регион." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Дублиране" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Включи разрешението {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Активиране на {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Разгледай общности" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Експортиране" @@ -14885,7 +14900,7 @@ msgstr "Експортирай всяко изпратено от теб съо msgid "Export GIF URLs" msgstr "Експортиране на GIF URL адреси" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Експортиране на библиотека" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Импортиране на шаблон от {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Импортирай .css файл, за да започнеш, или постави свой собствен CSS в „Бърз CSS“." @@ -18086,7 +18101,9 @@ msgstr "Импортирането завърши. {importedCount, plural, one { msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Импортирането завърши. {importedCount, plural, one {Добавен е # GIF файл} other {Добавени са # GIF файла}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Импортиране на CSS" @@ -18098,7 +18115,7 @@ msgstr "Импортиране на любими GIF файлове" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Импортиране на папка" @@ -18107,7 +18124,7 @@ msgstr "Импортиране на папка" msgid "Import GIFs" msgstr "Импортиране на GIF файлове" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Импортиране на библиотека" @@ -18150,13 +18167,13 @@ msgstr "Важна информация:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "{length, plural, one {Импортиран е # файл с тема} other {Импортирани са # файла с тема}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Импортирани са {themes, plural, one {# тема} other {# теми}} и {assets, plural, one {# ресурс} other {# ресурса}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Инсталиране на актуализация за настолното приложение…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Незабавни съобщения и VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Програма за незабавни съобщения" @@ -19903,6 +19920,13 @@ msgstr "Свържи външни акаунти и домейни с профи msgid "Link external accounts and domains to your profile" msgstr "Свържи външни акаунти и домейни с профила си" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Свързване на файл" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Свържи своя акаунт в {BLUESKY_PROVIDER_NAME} или п msgid "Linked" msgstr "Свързани" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Свързани {length, plural, one {# файл с тема} other {# файла с теми}}. Промените, които запишете в тях, се прилагат веднага." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Свързани акаунти" msgid "Linked devices" msgstr "Свързани устройства" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Свързаният файл не е наличен" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Свързано с {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Свързано с {path}. Редактирайте файла във всеки редактор и запазените промени ще се приложат тук веднага." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Свързано с файл" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Презаписвания на лентите с подкани" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "няма текстово съдържание" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Няма избрана тема." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Няма теми, отговарящи на търсенето ти." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Все още няма запазени теми." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Избор на доставчик за търсене по изображение" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Избери тема отляво, за да редактираш името, метаданните и CSS. Или импортирай нова." @@ -27320,7 +27369,7 @@ msgstr "Премахване от запазените медии" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Без задържане отгоре" @@ -28959,7 +29008,7 @@ msgstr "Запазване на иконата" msgid "Save some media from messages to get started!" msgstr "Запази медия от съобщения, за да започнеш!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Запазване на темата" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Търсене в мрежата" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Търсене на теми…" @@ -32504,7 +32553,7 @@ msgstr "Пълна интерактивност, когато прозорецъ #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Винаги отгоре" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Таг" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Етикети" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Цвят на темата" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS на темата" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Темата не е намерена" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Темата е запазена." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Това възстановява сумата по последната ти фактура и анулира всички свързани абонаменти. Няма да можеш да поискаш ново самостоятелно възстановяване в следващите 30 дни." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Това ще премахне „{themeName}“ от това устройство." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Доверените домейни са изчистени." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Опитай с друго име или изчисти търсенето." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Прекъсни връзката" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Значка за непрочетени съобщения" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Непрочетени съобщения" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Непрочетени съобщения: {count}" @@ -36807,7 +36861,7 @@ msgstr "Непрочетени съобщения: {count}" msgid "Unreads" msgstr "Непрочетени" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Незапазени промени" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Върмонт" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Версия" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "В момента не успяхме да препратим съобщението." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Не успяхме да импортираме този файл с библиотека с теми." diff --git a/fluxer_app/src/features/i18n/locales/cs/messages.po b/fluxer_app/src/features/i18n/locales/cs/messages.po index 5232cea69..8a79ecfe6 100644 --- a/fluxer_app/src/features/i18n/locales/cs/messages.po +++ b/fluxer_app/src/features/i18n/locales/cs/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# aplikace vybraná ke zrušení přístupu} few {# aplikace vybrané ke zrušení přístupu} many {# aplikace vybrané ke zrušení přístupu} other {# aplikací vybraných ke zrušení přístupu}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} se nemůže připojit ke svým serverům. Bude se dál pokoušet na pozadí." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "Aplikaci {appName} se nepodařilo spustit" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# textový kanál} few {# textové kanály} many {# textového kanálu} other {# textových kanálů}}, {voiceChannelCount, plural, one {# hlasový kanál} few {# hlasové kanály} many {# hlasového kanálu} other {# hlasových kanálů}}, {categoryCount, plural, one {# kategorie} few {# kategorie} many {# kategorie} other {# kategorií}}, {roleCount, plural, one {# role} few {# role} many {# role} other {# rolí}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} (kopie)" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Kód z ověřovací aplikace" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Autor" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Nemáte přístup k e-mailu?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Nelze se připojit" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Nelze najít {path}. Používá se poslední načtená verze." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Sem nelze vložit obrázek" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Nelze přečíst {path}. Používá se poslední načtená verze." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Již brzy" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "oddělené čárkou" @@ -10817,6 +10827,11 @@ msgstr "Ořezávání {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "Soubory CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Smazat kategorii „{categoryName}“? Tuto akci nelze vrátit zpět." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Smazat motiv" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Smazat motiv?" @@ -13231,7 +13246,7 @@ msgstr "Kvůli zákonům o obsahu pro dospělé v oblasti {regionName} zde tento msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Vzhledem k zákonům o obsahu pro dospělé v oblasti {regionName} není toto médium z vašeho aktuálního regionu dostupné." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplikovat" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Povolit oprávnění {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Zapnout {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Prozkoumat komunity" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Exportovat" @@ -14885,7 +14900,7 @@ msgstr "Exportujte každou zprávu, kterou jste kdy odeslali, a k tomu všechna msgid "Export GIF URLs" msgstr "Exportovat adresy URL GIFů" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Exportovat knihovnu" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importovat šablonu {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Začněte importováním souboru .css, nebo vložte vlastní CSS do Rychlého CSS." @@ -18086,7 +18101,9 @@ msgstr "Import dokončen. {importedCount, plural, one {Byl přidán # GIF} few { msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Import dokončen. {importedCount, plural, one {Byl přidán # GIF.} few {Byly přidány # GIFy.} many {Bylo přidáno # GIFu.} other {Bylo přidáno # GIFů.}}" -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importovat CSS" @@ -18098,7 +18115,7 @@ msgstr "Importovat oblíbené GIFy" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importovat složku" @@ -18107,7 +18124,7 @@ msgstr "Importovat složku" msgid "Import GIFs" msgstr "Importovat GIFy" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importovat knihovnu" @@ -18150,13 +18167,13 @@ msgstr "Důležité informace:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "{length, plural, one {Byl importován # soubor motivu.} few {Byly importovány # soubory motivů.} many {Bylo importováno # souboru motivů.} other {Bylo importováno # souborů motivů.}}" #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Importováno: {themes, plural, one {# motiv} few {# motivy} many {# motivu} other {# motivů}} a {assets, plural, one {# soubor} few {# soubory} many {# souboru} other {# souborů}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Instaluje se aktualizace desktopové aplikace…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Rychlé zprávy a internetové hovory (VoIP)" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Internetový komunikátor" @@ -19903,6 +19920,13 @@ msgstr "Propojte externí účty a domény se svým profilem {PRODUCT_NAME}. Ov msgid "Link external accounts and domains to your profile" msgstr "Propojte externí účty a domény se svým profilem" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Propojit soubor" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Propojte svůj účet {BLUESKY_PROVIDER_NAME} nebo ověřte vlastnictví msgid "Linked" msgstr "Propojeno" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Propojený soubor {length, plural, one {# motiv} other {# motivů}}. Změny, které do nich uložíte, se projeví okamžitě." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Propojené účty" msgid "Linked devices" msgstr "Propojená zařízení" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Propojený soubor není k dispozici" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Propojeno s {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Propojeno s {path}. Soubor upravte v libovolném editoru a uložené změny se zde okamžitě projeví." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Propojeno se souborem" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Přepsání lišty oznámení" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "žádný textový obsah" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Není vybrán žádný motiv." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Žádné motivy neodpovídají vašemu hledání." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Zatím žádné uložené motivy." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Vyberte poskytovatele vyhledávání podle obrázku" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Vyberte vlevo motiv a upravte jeho název, metadata a CSS. Nebo importujte nový." @@ -27320,7 +27369,7 @@ msgstr "Odstranit z uložených médií" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Odebrat ze seznamu oken nahoře" @@ -28959,7 +29008,7 @@ msgstr "Uložit ikonu" msgid "Save some media from messages to get started!" msgstr "Pokud chcete začít, uložte si nějaká média ze zpráv!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Uložit motiv" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Hledat na webu" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Hledat motivy…" @@ -32504,7 +32553,7 @@ msgstr "Zůstat plně interaktivní, i když není okno aktivní" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Zobrazovat nad ostatními okny" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Štítek" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Štítky" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Barva motivu" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS motivu" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Motiv nebyl nalezen" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Motiv uložen." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Vrátí se vám peníze za poslední fakturu a zruší se případné související předplatné. Další samoobslužné vrácení peněz bude možné až za 30 dní." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Tímto se \"{themeName}\" odstraní z tohoto zařízení." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Důvěryhodné domény vymazány." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Zkuste jiný název nebo vymažte hledání." @@ -36496,6 +36545,11 @@ msgstr "neznámá-zmínka" msgid "unknown-role" msgstr "neznámá-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Odpojit" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Označení nepřečtených zpráv" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Nepřečtené zprávy" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Nepřečtené zprávy: {count}" @@ -36807,7 +36861,7 @@ msgstr "Nepřečtené zprávy: {count}" msgid "Unreads" msgstr "Nepřečtené" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Neuložené změny" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Verze" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Zprávu se momentálně nepodařilo přeposlat." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Soubor knihovny motivů se nepodařilo importovat." diff --git a/fluxer_app/src/features/i18n/locales/da/messages.po b/fluxer_app/src/features/i18n/locales/da/messages.po index 442c1f664..be1b58294 100644 --- a/fluxer_app/src/features/i18n/locales/da/messages.po +++ b/fluxer_app/src/features/i18n/locales/da/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# app valgt til at få adgang tilbagekaldt} other {# apps valgt til at få adgang tilbagekaldt}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} kan ikke kontakte sine servere. Den vil fortsætte med at prøve i baggrunden." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} kunne ikke starte" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# tekstkanal} other {# tekstkanaler}}, {voiceChannelCount, plural, one {# talekanal} other {# talekanaler}}, {categoryCount, plural, one {# kategori} other {# kategorier}}, {roleCount, plural, one {# rolle} other {# roller}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Kopi af {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Kode fra godkendelsesapp" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Forfatter" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Kan du ikke få adgang til den e-mailadresse?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Kan ikke oprette forbindelse" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Kan ikke finde {path}. Bruger den sidst indlæste version." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Kan ikke indsætte billede her" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Kan ikke læse {path}. Bruger den sidst indlæste version." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Kommer snart" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "komma, adskilt" @@ -10817,6 +10827,11 @@ msgstr "Beskærer {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS-filer" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Slet kategorien \"{categoryName}\"? Dette kan ikke fortrydes." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Slet tema" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Slet tema?" @@ -13231,7 +13246,7 @@ msgstr "På grund af lovgivningen om indhold for voksne i {regionName} er dette msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "På grund af lovgivningen om indhold for voksne i {regionName} er dette medie ikke tilgængeligt fra din nuværende region." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplikér" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Slå tilladelsen {permissionName} til" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Aktiver {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Udforsk fællesskaber" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Eksporter" @@ -14885,7 +14900,7 @@ msgstr "Eksporter alle beskeder, du nogensinde har sendt, plus alle dine kontoin msgid "Export GIF URLs" msgstr "Eksporter GIF-URL'er" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Eksporter bibliotek" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importer skabelon fra {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Importer en .css-fil for at komme i gang, eller indsæt din egen CSS i Hurtig CSS." @@ -18086,7 +18101,9 @@ msgstr "Import fuldført. Tilføjede {importedCount, plural, one {# GIF} other { msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Import fuldført. Tilføjede {importedCount, plural, one {# GIF} other {# GIF'er}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importer CSS" @@ -18098,7 +18115,7 @@ msgstr "Importer GIF-favoritter" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importer mappe" @@ -18107,7 +18124,7 @@ msgstr "Importer mappe" msgid "Import GIFs" msgstr "Importer GIF'er" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importer bibliotek" @@ -18150,13 +18167,13 @@ msgstr "Vigtig information:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Importerede {length, plural, one {# temafil} other {# temafiler}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Importerede {themes, plural, one {# tema} other {# temaer}} og {assets, plural, one {# ressource} other {# ressourcer}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Installerer opdatering til computerappen…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Onlinechat og VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Chatprogram" @@ -19903,6 +19920,13 @@ msgstr "Knyt eksterne konti og domæner til din {PRODUCT_NAME}-profil. Bekræfte msgid "Link external accounts and domains to your profile" msgstr "Knyt eksterne konti og domæner til din profil" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Link fil" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Tilknyt din {BLUESKY_PROVIDER_NAME}-konto, eller bekræft, at du ejer do msgid "Linked" msgstr "Tilknyttet" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Koblede {length, plural, one {# tema-fil} other {# tema-filer}}. Ændringer, du gemmer, anvendes med det samme." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Tilknyttede konti" msgid "Linked devices" msgstr "Tilsluttede enheder" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Fil ikke tilgængelig" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Linket til {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Link til {path}. Rediger filen i en hvilken som helst editor, og gemte ændringer anvendes her med det samme." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Linket til en fil" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Tvungne indstillinger for beskedbjælker" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "intet tekstindhold" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Intet tema valgt." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Ingen temaer matcher din søgning." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Ingen temaer er gemt endnu." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Vælg en udbyder til omvendt billedsøgning" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Vælg et tema til venstre for at redigere navn, metadata og CSS. Eller importer et nyt." @@ -27320,7 +27369,7 @@ msgstr "Fjern fra gemte medier" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Slå altid øverst fra" @@ -28959,7 +29008,7 @@ msgstr "Gem ikon" msgid "Save some media from messages to get started!" msgstr "Gem medier fra beskeder for at komme i gang!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Gem tema" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Søg på nettet" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Søg efter temaer …" @@ -32504,7 +32553,7 @@ msgstr "Forbliv fuldt interaktiv, når appen ikke er i fokus" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Altid øverst" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tag" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tags" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Temafarve" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "Tema-CSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Temaet blev ikke fundet" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Tema gemt." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Dette refunderer din seneste faktura og annullerer ethvert tilknyttet abonnement. Du kan ikke selv refundere igen i 30 dage." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Dette fjerner \"{themeName}\" fra denne enhed." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Betroede domæner er ryddet." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Prøv et andet navn, eller ryd søgningen." @@ -36496,6 +36545,11 @@ msgstr "ukendt-omtale" msgid "unknown-role" msgstr "ukendt-rolle" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Fjern link" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Badge for ulæste beskeder" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Ulæste beskeder" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Ulæste beskeder: {count}" @@ -36807,7 +36861,7 @@ msgstr "Ulæste beskeder: {count}" msgid "Unreads" msgstr "Ulæste" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Ugemte ændringer" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Version" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Vi kunne ikke videresende beskeden lige nu." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Vi kunne ikke importere den temabiblioteksfil." diff --git a/fluxer_app/src/features/i18n/locales/de/messages.po b/fluxer_app/src/features/i18n/locales/de/messages.po index 15a3ae21d..dd6c07f52 100644 --- a/fluxer_app/src/features/i18n/locales/de/messages.po +++ b/fluxer_app/src/features/i18n/locales/de/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# App für den Widerruf des Zugriffs ausgewählt} other {# Apps für den Widerruf des Zugriffs ausgewählt}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} kann seine Server nicht erreichen. Es wird im Hintergrund weiter versuchen." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} konnte nicht gestartet werden" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# Textkanal} other {# Textkanäle}}, {voiceChannelCount, plural, one {# Sprachkanal} other {# Sprachkanäle}}, {categoryCount, plural, one {# Kategorie} other {# Kategorien}}, {roleCount, plural, one {# Rolle} other {# Rollen}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Kopie von {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Authentifizierungscode" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Autor" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Kein Zugriff auf diese E-Mail-Adresse?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Kann keine Verbindung herstellen" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "{path} nicht gefunden. Die zuletzt geladene Version wird verwendet." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Bild kann hier nicht eingefügt werden" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Kann {path} nicht lesen. Die zuletzt geladene Version wird verwendet." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Demnächst verfügbar" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "Kommagetrennt" @@ -10817,6 +10827,11 @@ msgstr "Zuschneiden von {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS-Dateien" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Kategorie \"{categoryName}\" löschen? Dies kann nicht rückgängig gemacht werden." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Design löschen" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Design löschen?" @@ -13231,7 +13246,7 @@ msgstr "Aufgrund von Gesetzen zu nicht jugendfreien Inhalten in {regionName} ist msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Aufgrund von Gesetzen zu nicht jugendfreien Inhalten in {regionName} ist dieses Medium in deiner aktuellen Region nicht verfügbar." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplizieren" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "{permissionName}-Berechtigung aktivieren" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "\"{themeName}\" aktivieren" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Communitys entdecken" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Exportieren" @@ -14885,7 +14900,7 @@ msgstr "Exportiert jede Nachricht, die du jemals gesendet hast, sowie alle deine msgid "Export GIF URLs" msgstr "GIF-URLs exportieren" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Bibliothek exportieren" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Vorlage von {theOtherPlatform} importieren" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Importiere eine .css-Datei, um zu beginnen, oder füge dein eigenes CSS unter „Schnell-CSS“ ein." @@ -18086,7 +18101,9 @@ msgstr "Import abgeschlossen. {importedCount, plural, one {# GIF} other {# GIFs} msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Import abgeschlossen. {importedCount, plural, one {# GIF} other {# GIFs}} hinzugefügt." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "CSS importieren" @@ -18098,7 +18115,7 @@ msgstr "Lieblings-GIFs importieren" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Ordner importieren" @@ -18107,7 +18124,7 @@ msgstr "Ordner importieren" msgid "Import GIFs" msgstr "GIFs importieren" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Bibliothek importieren" @@ -18150,13 +18167,13 @@ msgstr "Wichtige Informationen:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "{length, plural, one {# Design-Datei} other {# Design-Dateien}} importiert." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "{themes, plural, one {# Design} other {# Designs}} und {assets, plural, one {# Asset} other {# Assets}} importiert." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Desktop-Update wird installiert …" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Sofortnachrichten und VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Sofortnachrichtendienst" @@ -19903,6 +19920,13 @@ msgstr "Verknüpfe externe Accounts und Domains mit deinem {PRODUCT_NAME}-Profil msgid "Link external accounts and domains to your profile" msgstr "Externe Accounts und Domains mit deinem Profil verknüpfen" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Datei verknüpfen" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Verknüpfe deinen {BLUESKY_PROVIDER_NAME}-Account oder verifiziere den B msgid "Linked" msgstr "Verknüpft" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Verknüpfte {length, plural, one {# Theme-Datei} other {# Theme-Dateien}}. Änderungen, die du daran speicherst, werden sofort übernommen." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Verknüpfte Accounts" msgid "Linked devices" msgstr "Verknüpfte Geräte" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Verknüpfte Datei nicht verfügbar" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Verknüpft mit {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Verknüpft mit {path}. Bearbeite die Datei in einem beliebigen Editor und gespeicherte Änderungen werden sofort hier übernommen." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Mit einer Datei verknüpft" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Nagbar-Overrides" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "kein Textinhalt" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Kein Design ausgewählt." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Keine Designs passen zu deiner Suche." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Noch keine Designs gespeichert." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Anbieter für die Bilderrückwärtssuche auswählen" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Wähle links ein Design aus, um seinen Namen, seine Metadaten und sein CSS zu bearbeiten. Oder importiere ein neues." @@ -27320,7 +27369,7 @@ msgstr "Aus den gespeicherten Medien entfernen" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Nicht mehr obenan anzeigen" @@ -28959,7 +29008,7 @@ msgstr "Symbol speichern" msgid "Save some media from messages to get started!" msgstr "Speichere Medien aus Chats, um loszulegen!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Design speichern" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Im Web suchen" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Designs suchen …" @@ -32504,7 +32553,7 @@ msgstr "Interaktiv bleiben, wenn App nicht im Fokus ist" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Immer im Vordergrund anzeigen" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tag" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tags" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Designfarbe" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "Design-CSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Design nicht gefunden" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Design gespeichert." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Dadurch wird deine letzte Rechnung erstattet und ein damit verbundenes Abo gekündigt. Du kannst 30 Tage lang keine weitere Rückerstattung selbst anfordern." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Dadurch wird \"{themeName}\" von diesem Gerät entfernt." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Vertrauenswürdige Domains gelöscht." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Versuch einen anderen Namen oder lösch die Suche." @@ -36496,6 +36545,11 @@ msgstr "unbekannte-erwähnung" msgid "unknown-role" msgstr "unbekannte-rolle" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Trennen" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Badge für ungelesene Nachrichten" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Ungelesene Nachrichten" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Ungelesene Nachrichten: {count}" @@ -36807,7 +36861,7 @@ msgstr "Ungelesene Nachrichten: {count}" msgid "Unreads" msgstr "Ungelesene" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Ungespeicherte Änderungen" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Version" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Nachricht konnte zurzeit nicht weitergeleitet werden." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Die Designbibliothek-Datei konnte nicht importiert werden." diff --git a/fluxer_app/src/features/i18n/locales/el/messages.po b/fluxer_app/src/features/i18n/locales/el/messages.po index f0a027197..6a6986e4b 100644 --- a/fluxer_app/src/features/i18n/locales/el/messages.po +++ b/fluxer_app/src/features/i18n/locales/el/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# εφαρμογή επιλέχθηκε για ανάκληση πρόσβασης} other {# εφαρμογές επιλέχθηκαν για ανάκληση πρόσβασης}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "Το {appName} δεν μπορεί να συνδεθεί στους διακομιστές του. Θα συνεχίσει να προσπαθεί στο παρασκήνιο." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "Το {appName} δεν μπόρεσε να ξεκινήσει" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# κανάλι κειμένου} other {# κανάλια κειμένου}}, {voiceChannelCount, plural, one {# κανάλι φωνής} other {# κανάλια φωνής}}, {categoryCount, plural, one {# κατηγορία} other {# κατηγορίες}}, {roleCount, plural, one {# ρόλος} other {# ρόλοι}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} αντίγραφο" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Κωδικός ελέγχου ταυτότητας" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Δημιουργός" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Δεν έχετε πρόσβαση σε αυτό το email;" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Δεν είναι δυνατή η σύνδεση" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Δεν βρέθηκε το {path}. Χρησιμοποιείται η τελευταία ληφθείσα έκδοση." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Δεν είναι δυνατή η επικόλληση εικόνας εδώ" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Δεν είναι δυνατή η ανάγνωση του {path}. Χρησιμοποιείται η τελευταία φορτωμένη έκδοση." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Σύντομα" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "διαχωρισμένα με κόμμα" @@ -10817,6 +10827,11 @@ msgstr "Κοπή {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "Αρχεία CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Ντέλαγουερ" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Διαγραφή της κατηγορίας \"{categoryName}\"; Δεν μπορεί να αναιρεθεί." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Διαγραφή θέματος" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Διαγραφή θέματος;" @@ -13231,7 +13246,7 @@ msgstr "Λόγω των νόμων περί περιεχομένου ενηλί msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Λόγω των νόμων περί περιεχομένου ενηλίκων στην περιοχή {regionName}, αυτό το αρχείο πολυμέσων δεν είναι διαθέσιμο από την τρέχουσα περιοχή σας." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Αντιγραφή" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Ενεργοποίηση άδειας {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Ενεργοποίηση {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Εξερεύνηση κοινοτήτων" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Εξαγωγή" @@ -14885,7 +14900,7 @@ msgstr "Εξαγωγή κάθε μηνύματος που έχετε στείλ msgid "Export GIF URLs" msgstr "Εξαγωγή URL GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Εξαγωγή βιβλιοθήκης" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Εισαγωγή προτύπου από {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Εισαγάγετε ένα αρχείο .css για να ξεκινήσετε ή επικολλήστε το δικό σας CSS στο Γρήγορο CSS." @@ -18086,7 +18101,9 @@ msgstr "Η εισαγωγή ολοκληρώθηκε. Προστέθηκαν {im msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Η εισαγωγή ολοκληρώθηκε. Προστέθηκαν {importedCount, plural, one {# GIF} other {# GIF}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Εισαγωγή CSS" @@ -18098,7 +18115,7 @@ msgstr "Εισαγωγή αγαπημένων GIF" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Εισαγωγή φακέλου" @@ -18107,7 +18124,7 @@ msgstr "Εισαγωγή φακέλου" msgid "Import GIFs" msgstr "Εισαγωγή GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Εισαγωγή βιβλιοθήκης" @@ -18150,13 +18167,13 @@ msgstr "Σημαντικές πληροφορίες:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Εισήχθησαν {length, plural, one {# αρχείο θέματος} other {# αρχεία θέματος}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Εισήχθησαν {themes, plural, one {# θέμα} other {# θέματα}} και {assets, plural, one {# στοιχείο} other {# στοιχεία}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Εγκατάσταση ενημέρωσης για υπολογιστή…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Άμεσα μηνύματα και VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Εφαρμογή άμεσων μηνυμάτων" @@ -19903,6 +19920,13 @@ msgstr "Συνδέστε εξωτερικούς λογαριασμούς και msgid "Link external accounts and domains to your profile" msgstr "Σύνδεση εξωτερικών λογαριασμών και τομέων στο προφίλ σας" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Σύνδεση αρχείου" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Συνδέστε τον λογαριασμό σας στο {BLUESKY_PROV msgid "Linked" msgstr "Συνδεδεμένο" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Συνδεδεμένα {length, plural, one {# αρχείο θέματος} other {# αρχεία θεμάτων}}. Οι αλλαγές που αποθηκεύετε εφαρμόζονται αμέσως." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Συνδεδεμένοι λογαριασμοί" msgid "Linked devices" msgstr "Συνδεδεμένες συσκευές" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Το συνδεδεμένο αρχείο δεν είναι διαθέσιμο" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Συνδέθηκε με το {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Συνδέθηκε με το {path}. Επεξεργαστείτε το αρχείο σε οποιονδήποτε επεξεργαστή και οι αποθηκευμένες αλλαγές εφαρμόζονται εδώ αμέσως." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Συνδέεται με ένα αρχείο" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Παρακάμψεις γραμμών ειδοποιήσεων" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "χωρίς περιεχόμενο κειμένου" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Δεν έχει επιλεγεί θέμα." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Δεν βρέθηκαν θέματα που να ταιριάζουν με την αναζήτησή σας." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Δεν έχουν αποθηκευτεί θέματα ακόμα." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Επιλέξτε πάροχο αντίστροφης αναζήτησης εικόνων" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Επιλέξτε ένα θέμα στα αριστερά για να επεξεργαστείτε το όνομα, τα μεταδεδομένα και το CSS του. Ή εισαγάγετε ένα νέο." @@ -27320,7 +27369,7 @@ msgstr "Αφαίρεση από τα αποθηκευμένα πολυμέσα" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Αφαίρεση από την κορυφή" @@ -28959,7 +29008,7 @@ msgstr "Αποθήκευση εικονιδίου" msgid "Save some media from messages to get started!" msgstr "Αποθηκεύστε μερικά πολυμέσα από μηνύματα για να ξεκινήσετε!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Αποθήκευση θέματος" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Αναζήτηση στο διαδίκτυο" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Αναζήτηση θεμάτων…" @@ -32504,7 +32553,7 @@ msgstr "Να παραμένει πλήρως διαδραστικό όταν δ #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Πάντα σε πρώτο πλάνο" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Ετικέτα" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Ετικέτες" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Χρώμα θέματος" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS θέματος" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Το θέμα δεν βρέθηκε" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Το θέμα αποθηκεύτηκε." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Αυτό επιστρέφει τα χρήματα του πιο πρόσφατου τιμολογίου σας και ακυρώνει τυχόν σχετική συνδρομή. Δεν θα μπορείτε να κάνετε ξανά επιστροφή χρημάτων μόνοι σας για 30 ημέρες." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Αυτό καταργεί το \"{themeName}\" από αυτήν τη συσκευή." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Οι αξιόπιστοι τομείς διαγράφηκαν." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Δοκιμάστε ένα διαφορετικό όνομα ή διαγράψτε την αναζήτηση." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Αποσύνδεση" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Σήμα μη αναγνωσμένων μηνυμάτων" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Μη αναγνωσμένα μηνύματα" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Μη αναγνωσμένα μηνύματα: {count}" @@ -36807,7 +36861,7 @@ msgstr "Μη αναγνωσμένα μηνύματα: {count}" msgid "Unreads" msgstr "Μη αναγνωσμένα" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Μη αποθηκευμένες αλλαγές" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Βερμόντ" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Έκδοση" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Δεν ήταν δυνατή η προώθηση του μηνύματος αυτή τη στιγμή." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Δεν ήταν δυνατή η εισαγωγή του αρχείου βιβλιοθήκης θέματος." diff --git a/fluxer_app/src/features/i18n/locales/en-GB/messages.po b/fluxer_app/src/features/i18n/locales/en-GB/messages.po index fe6daee57..92b92acaa 100644 --- a/fluxer_app/src/features/i18n/locales/en-GB/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-GB/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# app selected for access revocation} other {# apps selected for access revocation}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} can't reach its servers. It will keep trying in the background." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} failed to start" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# text channel} other {# text channels}}, {voiceChannelCount, plural, one {# voice channel} other {# voice channels}}, {categoryCount, plural, one {# category} other {# categories}}, {roleCount, plural, one {# role} other {# roles}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} Copy" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Authenticator code" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Author" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Can't access that email?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Cannot connect" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Can't find {path}. Using the last loaded version." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Can't paste image here" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Can't read {path}. Using the last loaded version." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Coming soon" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "comma, separated" @@ -10817,6 +10827,11 @@ msgstr "Cropping {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS files" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Delete the category \"{categoryName}\"? Can't be undone." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Delete theme" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Delete theme?" @@ -13231,7 +13246,7 @@ msgstr "Due to mature content laws in {regionName}, this content is not availabl msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Due to mature content laws in {regionName}, this media is not available from your current region." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplicate" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Enable {permissionName} permission" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Enable {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Explore communities" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Export" @@ -14885,7 +14900,7 @@ msgstr "Export every message you have ever sent, plus all of your account settin msgid "Export GIF URLs" msgstr "Export GIF URLs" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Export library" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Import {theOtherPlatform} template" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Import a .css file to get started, or paste your own CSS in Quick CSS." @@ -18086,7 +18101,9 @@ msgstr "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Import CSS" @@ -18098,7 +18115,7 @@ msgstr "Import favourite GIFs" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Import folder" @@ -18107,7 +18124,7 @@ msgstr "Import folder" msgid "Import GIFs" msgstr "Import GIFs" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Import library" @@ -18150,13 +18167,13 @@ msgstr "Important information:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Imported {length, plural, one {# theme file} other {# theme files}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Installing desktop update…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Instant messaging and VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Instant Messenger" @@ -19903,6 +19920,13 @@ msgstr "Link external accounts and domains to your {PRODUCT_NAME} profile. Verif msgid "Link external accounts and domains to your profile" msgstr "Link external accounts and domains to your profile" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Link file" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Link your {BLUESKY_PROVIDER_NAME} account or verify domain ownership to msgid "Linked" msgstr "Linked" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,27 @@ msgstr "Linked accounts" msgid "Linked devices" msgstr "Linked devices" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Linked file unavailable" + +# auto-i18n: reviewed unchanged +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Linked to {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Linked to {path}. Edit the file in any editor and saved changes apply here right away." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Linked to a file" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22451,7 @@ msgstr "Nagbar overrides" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23393,17 @@ msgid "no text content" msgstr "no text content" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "No theme selected." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "No themes match your search." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "No themes saved yet." @@ -25328,7 +25378,7 @@ msgid "Pick a reverse image search provider" msgstr "Pick a reverse image search provider" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." @@ -27320,7 +27370,7 @@ msgstr "Remove from saved media" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Remove from top" @@ -28959,7 +29009,7 @@ msgstr "Save icon" msgid "Save some media from messages to get started!" msgstr "Save some media from messages to get started!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Save theme" @@ -29537,7 +29587,7 @@ msgid "Search the web" msgstr "Search the web" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Search themes…" @@ -32504,7 +32554,7 @@ msgstr "Stay fully interactive when unfocused" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Stay on top" @@ -33463,7 +33513,7 @@ msgid "Tag" msgstr "Tag" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tags" @@ -34140,7 +34190,7 @@ msgid "Theme color" msgstr "Theme colour" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "Theme CSS" @@ -34160,7 +34210,7 @@ msgid "Theme not found" msgstr "Theme not found" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Theme saved." @@ -34892,7 +34942,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "This refunds your most recent invoice and cancels any associated subscription. You won't be able to self-refund again for 30 days." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "This removes \"{themeName}\" from this device." @@ -35638,7 +35688,7 @@ msgid "Trusted domains cleared." msgstr "Trusted domains cleared." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Try a different name or clear the search." @@ -36496,6 +36546,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Unlink" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36848,12 @@ msgid "Unread message badge" msgstr "Unread message badge" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Unread messages" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Unread messages: {count}" @@ -36807,7 +36862,7 @@ msgstr "Unread messages: {count}" msgid "Unreads" msgstr "Unreads" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Unsaved changes" @@ -38123,7 +38178,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Version" @@ -39034,7 +39089,7 @@ msgid "We couldn't forward the message at this time." msgstr "We couldn't forward the message at this time." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "We couldn't import that theme library file." @@ -41026,7 +41081,6 @@ msgstr "Your screen share could not be published with a compatible video codec, msgid "Your stream is still live" msgstr "Your stream is still live" -# auto-i18n: reviewed unchanged #. Heading of the subscription management panel on the Plutonium page. #: src/features/premium/components/plutonium_page/PlutoniumPageMessages.ts:79 msgid "Your subscription" diff --git a/fluxer_app/src/features/i18n/locales/en-US/messages.po b/fluxer_app/src/features/i18n/locales/en-US/messages.po index 97ff1f51c..9935d3344 100644 --- a/fluxer_app/src/features/i18n/locales/en-US/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-US/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# app selected for access revocation} other {# apps selected for access revocation}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} can't reach its servers. It will keep trying in the background." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} failed to start" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# text channel} other {# text channels}}, {voiceChannelCount, plural, one {# voice channel} other {# voice channels}}, {categoryCount, plural, one {# category} other {# categories}}, {roleCount, plural, one {# role} other {# roles}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} Copy" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Authenticator code" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Author" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Can't access that email?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Can't connect" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Can't find {path}. Using the last loaded version." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Can't paste image here" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Can't read {path}. Using the last loaded version." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Coming soon" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "comma, separated" @@ -10817,6 +10827,11 @@ msgstr "Cropping {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS files" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Delete the category \"{categoryName}\"? Can't be undone." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Delete theme" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Delete theme?" @@ -13231,7 +13246,7 @@ msgstr "Due to mature content laws in {regionName}, this content is not availabl msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Due to mature content laws in {regionName}, this media is not available from your current region." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplicate" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Enable {permissionName} permission" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Enable {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Explore communities" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Export" @@ -14885,7 +14900,7 @@ msgstr "Export every message you have ever sent, plus all of your account settin msgid "Export GIF URLs" msgstr "Export GIF URLs" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Export library" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Import {theOtherPlatform} template" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Import a .css file to get started, or paste your own CSS in Quick CSS." @@ -18086,7 +18101,9 @@ msgstr "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Import CSS" @@ -18098,7 +18115,7 @@ msgstr "Import favorite GIFs" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Import folder" @@ -18107,7 +18124,7 @@ msgstr "Import folder" msgid "Import GIFs" msgstr "Import GIFs" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Import library" @@ -18150,13 +18167,13 @@ msgstr "Important information:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Imported {length, plural, one {# theme file} other {# theme files}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Installing desktop update…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Instant messaging and VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Instant Messenger" @@ -19903,6 +19920,13 @@ msgstr "Link external accounts and domains to your {PRODUCT_NAME} profile. Verif msgid "Link external accounts and domains to your profile" msgstr "Link external accounts and domains to your profile" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Link file" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Link your {BLUESKY_PROVIDER_NAME} account or verify domain ownership to msgid "Linked" msgstr "Linked" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Linked accounts" msgid "Linked devices" msgstr "Linked devices" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Linked file unavailable" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Linked to {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Linked to {path}. Edit the file in any editor and saved changes apply here right away." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Linked to a file" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Nagbar overrides" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "no text content" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "No theme selected." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "No themes match your search." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "No themes saved yet." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Pick a reverse image search provider" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." @@ -27320,7 +27369,7 @@ msgstr "Remove from saved media" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Remove from top" @@ -28959,7 +29008,7 @@ msgstr "Save icon" msgid "Save some media from messages to get started!" msgstr "Save some media from messages to get started!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Save theme" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Search the web" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Search themes…" @@ -32504,7 +32553,7 @@ msgstr "Stay fully interactive when unfocused" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Stay on top" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tag" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tags" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Theme color" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "Theme CSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Theme not found" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Theme saved." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "This refunds your most recent invoice and cancels any associated subscription. You won't be able to self-refund again for 30 days." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "This removes \"{themeName}\" from this device." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Trusted domains cleared." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Try a different name or clear the search." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Unlink" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Unread message badge" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Unread messages" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Unread messages: {count}" @@ -36807,7 +36861,7 @@ msgstr "Unread messages: {count}" msgid "Unreads" msgstr "Unreads" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Unsaved changes" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Version" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "We couldn't forward the message at this time." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "We couldn't import that theme library file." diff --git a/fluxer_app/src/features/i18n/locales/es-419/messages.po b/fluxer_app/src/features/i18n/locales/es-419/messages.po index f7433dcf6..de434f25a 100644 --- a/fluxer_app/src/features/i18n/locales/es-419/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-419/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# aplicación seleccionada para revocar su acceso} other {# aplicaciones seleccionadas para revocar su acceso}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} no puede conectarse a sus servidores. Seguirá intentándolo en segundo plano." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} no se pudo iniciar" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# canal de texto} many {# canales de texto} other {# canales de texto}}, {voiceChannelCount, plural, one {# canal de voz} many {# canales de voz} other {# canales de voz}}, {categoryCount, plural, one {# categoría} many {# categorías} other {# categorías}}, {roleCount, plural, one {# rol} many {# roles} other {# roles}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Copia de {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Código de autenticación" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Autor" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "¿No puedes acceder a ese correo electrónico?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "No se puede conectar" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "No se encontró {path}. Se está usando la última versión cargada." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "No se puede pegar la imagen aquí" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "No se puede leer {path}. Se está usando la última versión cargada." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Próximamente" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "separado por comas" @@ -10817,6 +10827,11 @@ msgstr "Recortando {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "Archivos CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "¿Eliminar la categoría \"{categoryName}\"? No se puede deshacer." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Eliminar tema" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "¿Eliminar tema?" @@ -13231,7 +13246,7 @@ msgstr "Debido a las leyes de contenido para adultos en {regionName}, este conte msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Debido a las leyes de contenido para adultos en {regionName}, este contenido multimedia no está disponible en tu región actual." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplicar" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Habilitar el permiso de {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Habilitar {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Explorar comunidades" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Exportar" @@ -14885,7 +14900,7 @@ msgstr "Exporta todos los mensajes que hayas enviado, además de la configuraci msgid "Export GIF URLs" msgstr "Exportar URL de GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Exportar biblioteca" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importar plantilla de {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Importa un archivo .css para empezar, o pega tu propio CSS en CSS rápido." @@ -18086,7 +18101,9 @@ msgstr "Importación completada. {importedCount, plural, one {Se agregó # GIF} msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Importación completada. {importedCount, plural, one {Se agregó # GIF} other {Se agregaron # GIFs}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importar CSS" @@ -18098,7 +18115,7 @@ msgstr "Importar GIF favoritos" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importar carpeta" @@ -18107,7 +18124,7 @@ msgstr "Importar carpeta" msgid "Import GIFs" msgstr "Importar GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importar biblioteca" @@ -18150,13 +18167,13 @@ msgstr "Información importante:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "{length, plural, one {Se importó # archivo de tema} other {Se importaron # archivos de tema}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Se importaron {themes, plural, one {# tema} other {# temas}} y {assets, plural, one {# recurso} other {# recursos}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Instalando actualización de escritorio…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Mensajería instantánea y VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Mensajería instantánea" @@ -19903,6 +19920,13 @@ msgstr "Vincula cuentas y dominios externos a tu perfil de {PRODUCT_NAME}. Las c msgid "Link external accounts and domains to your profile" msgstr "Vincula cuentas y dominios externos a tu perfil" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Vincular archivo" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Vincula tu cuenta de {BLUESKY_PROVIDER_NAME} o verifica la propiedad del msgid "Linked" msgstr "Vinculado" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Archivos de tema vinculados {length, plural, one {#} other {#}}. Los cambios que guardes se aplicarán de inmediato." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Cuentas vinculadas" msgid "Linked devices" msgstr "Dispositivos vinculados" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Archivo vinculado no disponible" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Vinculado a {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Vinculado a {path}. Edita el archivo en cualquier editor y los cambios guardados se aplicarán aquí de inmediato." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Vinculado a un archivo" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Estados forzados de la barra de avisos" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "sin contenido de texto" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "No hay ningún tema seleccionado." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Ningún tema coincide con tu búsqueda." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Aún no hay temas guardados." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Elige un proveedor de búsqueda inversa de imágenes" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Elige un tema a la izquierda para editar su nombre, metadatos y CSS. O importa uno nuevo." @@ -27320,7 +27369,7 @@ msgstr "Quitar del contenido multimedia guardado" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Quitar de la parte superior" @@ -28959,7 +29008,7 @@ msgstr "Guardar ícono" msgid "Save some media from messages to get started!" msgstr "¡Guarda contenido multimedia de los mensajes para empezar!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Guardar tema" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Buscar en la web" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Buscar temas…" @@ -32504,7 +32553,7 @@ msgstr "Mantener toda la interactividad cuando la ventana no esté activa" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Mantener en primer plano" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Etiqueta" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Etiquetas" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Color del tema" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS del tema" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Tema no encontrado" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Tema guardado." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Esto reembolsa tu factura más reciente y cancela cualquier suscripción asociada. No podrás volver a solicitar un reembolso por tu cuenta durante 30 días." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Esto eliminará \"{themeName}\" de este dispositivo." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Dominios de confianza borrados." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Prueba con otro nombre o borra la búsqueda." @@ -36496,6 +36545,11 @@ msgstr "mención-desconocida" msgid "unknown-role" msgstr "rol-desconocido" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Desvincular" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Insignia de mensajes sin leer" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Mensajes sin leer" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Mensajes sin leer: {count}" @@ -36807,7 +36861,7 @@ msgstr "Mensajes sin leer: {count}" msgid "Unreads" msgstr "No leídos" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Cambios sin guardar" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Versión" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "No pudimos reenviar el mensaje en este momento." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "No pudimos importar ese archivo de la biblioteca de temas." diff --git a/fluxer_app/src/features/i18n/locales/es-ES/messages.po b/fluxer_app/src/features/i18n/locales/es-ES/messages.po index a342d7d68..4def220e5 100644 --- a/fluxer_app/src/features/i18n/locales/es-ES/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-ES/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# aplicación seleccionada para revocar su acceso} other {# aplicaciones seleccionadas para revocar su acceso}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} no puede conectarse a sus servidores. Seguirá intentándolo en segundo plano." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "No se ha podido iniciar {appName}" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# canal de texto} many {# canales de texto} other {# canales de texto}}, {voiceChannelCount, plural, one {# canal de voz} many {# canales de voz} other {# canales de voz}}, {categoryCount, plural, one {# categoría} many {# categorías} other {# categorías}}, {roleCount, plural, one {# rol} many {# roles} other {# roles}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Copia de {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Código de autenticación" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Autor" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "¿No puedes acceder a ese correo electrónico?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "No se puede conectar" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "No se encuentra {path}. Se está utilizando la última versión cargada." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "No se puede pegar la imagen aquí" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "No se puede leer {path}. Se está utilizando la última versión cargada." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Próximamente" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "separado por comas" @@ -10817,6 +10827,11 @@ msgstr "Recortando {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "Archivos CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "¿Eliminar la categoría \"{categoryName}\"? No se puede deshacer." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Eliminar tema" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "¿Eliminar tema?" @@ -13231,7 +13246,7 @@ msgstr "Debido a las leyes de contenido para adultos en {regionName}, este conte msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Debido a las leyes de contenido para adultos en {regionName}, este contenido multimedia no está disponible en tu región actual." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplicar" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Habilitar el permiso {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Habilitar {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Explorar comunidades" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Exportar" @@ -14885,7 +14900,7 @@ msgstr "Exporta todos los mensajes que hayas enviado, además de los ajustes de msgid "Export GIF URLs" msgstr "Exportar URL de GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Exportar biblioteca" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importar plantilla de {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Importa un archivo .css para empezar, o pega tu propio CSS en CSS rápido." @@ -18086,7 +18101,9 @@ msgstr "Importación completada. {importedCount, plural, one {Se añadió # GIF} msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Importación completada. Se {importedCount, plural, one {añadió # GIF} other {añadieron # GIFs}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importar CSS" @@ -18098,7 +18115,7 @@ msgstr "Importar GIF favoritos" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importar carpeta" @@ -18107,7 +18124,7 @@ msgstr "Importar carpeta" msgid "Import GIFs" msgstr "Importar GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importar biblioteca" @@ -18150,13 +18167,13 @@ msgstr "Información importante:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Se {length, plural, one {importó # archivo de tema} other {importaron # archivos de tema}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Se importaron {themes, plural, one {# tema} other {# temas}} y {assets, plural, one {# recurso} other {# recursos}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Instalando actualización de escritorio…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Mensajería instantánea y VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Mensajería instantánea" @@ -19903,6 +19920,13 @@ msgstr "Vincula cuentas y dominios externos a tu perfil de {PRODUCT_NAME}. Las c msgid "Link external accounts and domains to your profile" msgstr "Vincula cuentas y dominios externos a tu perfil" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Vincular archivo" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Vincula tu cuenta de {BLUESKY_PROVIDER_NAME} o verifica la propiedad del msgid "Linked" msgstr "Vinculado" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Archivos de tema vinculados {length, plural, one {#} other {#}}. Los cambios que guardes en ellos se aplicarán de inmediato." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Cuentas vinculadas" msgid "Linked devices" msgstr "Dispositivos vinculados" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Archivo enlazado no disponible" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Vinculado a {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Vinculado a {path}. Edita el archivo en cualquier editor y los cambios guardados se aplicarán aquí de inmediato." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Vinculado a un archivo" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Estados forzados de la barra de avisos" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "sin contenido de texto" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "No hay ningún tema seleccionado." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "No hay temas que coincidan con tu búsqueda." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Aún no hay temas guardados." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Elige un proveedor de búsqueda inversa de imágenes" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Elige un tema a la izquierda para editar su nombre, metadatos y CSS. O importa uno nuevo." @@ -27320,7 +27369,7 @@ msgstr "Quitar del contenido multimedia guardado" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Quitar de la parte superior" @@ -28959,7 +29008,7 @@ msgstr "Guardar icono" msgid "Save some media from messages to get started!" msgstr "¡Guarda contenido multimedia de los mensajes para empezar!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Guardar tema" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Buscar en la web" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Buscar temas…" @@ -32504,7 +32553,7 @@ msgstr "Mantener toda la interactividad cuando la ventana no esté activa" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Mantener en primer plano" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Etiqueta" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Etiquetas" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Color del tema" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS del tema" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Tema no encontrado" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Tema guardado." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Esto reembolsa tu factura más reciente y cancela cualquier suscripción asociada. No podrás volver a solicitar un reembolso por tu cuenta durante 30 días." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Esto eliminará \"{themeName}\" de este dispositivo." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Dominios de confianza borrados." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Prueba con otro nombre o borra la búsqueda." @@ -36496,6 +36545,11 @@ msgstr "mención-desconocida" msgid "unknown-role" msgstr "rol-desconocido" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Desvincular" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Insignia de mensajes sin leer" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Mensajes sin leer" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Mensajes sin leer: {count}" @@ -36807,7 +36861,7 @@ msgstr "Mensajes sin leer: {count}" msgid "Unreads" msgstr "No leídos" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Cambios sin guardar" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Versión" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "No hemos podido reenviar el mensaje en este momento." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "No se pudo importar el archivo de la biblioteca de temas." diff --git a/fluxer_app/src/features/i18n/locales/fi/messages.po b/fluxer_app/src/features/i18n/locales/fi/messages.po index 1d6ded6c7..f5b5f5e89 100644 --- a/fluxer_app/src/features/i18n/locales/fi/messages.po +++ b/fluxer_app/src/features/i18n/locales/fi/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# sovellus valittu käyttöoikeuden poistoon} other {# sovellusta valittu käyttöoikeuden poistoon}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} ei saa yhteyttä palvelimiinsa. Se yrittää uudelleen taustalla." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} ei käynnistynyt" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# tekstikanava} other {# tekstikanavaa}}, {voiceChannelCount, plural, one {# äänikanava} other {# äänikanavaa}}, {categoryCount, plural, one {# kategoria} other {# kategoriaa}}, {roleCount, plural, one {# rooli} other {# roolia}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} (kopio)" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Todennuskoodi" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Tekijä" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Etkö pääse kyseiseen sähköpostiin?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Ei yhteyttä" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Ei löydy tiedostoa {path}. Käytetään viimeksi ladattua versiota." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Kuvaa ei voi liittää tähän" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Ei voida lukea tiedostoa {path}. Käytetään viimeksi ladattua versiota." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Tulossa pian" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "pilkulla erotettu" @@ -10817,6 +10827,11 @@ msgstr "Rajataan {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS-tiedostot" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Poistetaanko kategoria \"{categoryName}\"? Toimintoa ei voi kumota." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Poista teema" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Poistetaanko teema?" @@ -13231,7 +13246,7 @@ msgstr "Alueen {regionName} aikuissisältöä koskevien lakien vuoksi tämä sis msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Alueen {regionName} aikuissisältöä koskevien lakien vuoksi tämä media ei ole saatavilla nykyisellä alueellasi." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Monista" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Ota käyttöön {permissionName}-käyttöoikeus" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Ota käyttöön {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Tutustu yhteisöihin" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Vie" @@ -14885,7 +14900,7 @@ msgstr "Vie kaikki lähettämäsi viestit sekä kaikki tilisi asetukset, jäseny msgid "Export GIF URLs" msgstr "Vie GIF-URL-osoitteet" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Vie kirjasto" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Tuo {theOtherPlatform}-malli" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Aloita tuomalla .css-tiedosto tai liitä oma CSS-koodisi Pikatyyleihin." @@ -18086,7 +18101,9 @@ msgstr "Tuonti valmis. Lisättiin {importedCount, plural, one {# GIF} other {# G msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Tuonti valmis. Lisättiin {importedCount, plural, one {# GIF} other {# GIFiä}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Tuo CSS" @@ -18098,7 +18115,7 @@ msgstr "Tuo suosikki-GIFit" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Tuo kansio" @@ -18107,7 +18124,7 @@ msgstr "Tuo kansio" msgid "Import GIFs" msgstr "Tuo GIF-kuvia" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Tuo kirjasto" @@ -18150,13 +18167,13 @@ msgstr "Tärkeää tietoa:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Tuotiin {length, plural, one {# teematiedosto} other {# teematiedostoa}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Tuotiin {themes, plural, one {# teema} other {# teemaa}} ja {assets, plural, one {# resurssi} other {# resurssia}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Asennetaan työpöytäpäivitystä…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Pikaviestintä ja VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Pikaviestin" @@ -19903,6 +19920,13 @@ msgstr "Linkitä ulkoisia tilejä ja verkkotunnuksia {PRODUCT_NAME}-profiiliisi. msgid "Link external accounts and domains to your profile" msgstr "Linkitä ulkoisia tilejä ja verkkotunnuksia profiiliisi" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Linkitä tiedosto" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Linkitä {BLUESKY_PROVIDER_NAME}-tilisi tai vahvista verkkotunnuksen omi msgid "Linked" msgstr "Linkitetty" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Linkitetyt {length, plural, one {# teematiedosto} other {# teematiedostoa}}. Tallentamasi muutokset tulevat voimaan heti." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Linkitetyt tilit" msgid "Linked devices" msgstr "Linkitetyt laitteet" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Linkitetty tiedosto ei käytettävissä" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Linkitetty kohteeseen {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Linkitetty tiedostoon {path}. Muokkaa tiedostoa missä tahansa editorissa, niin tallennetut muutokset näkyvät täällä heti." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Linkitetty tiedostoon" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Ilmoituspalkin ohitukset" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "ei tekstisisältöä" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Teemaa ei ole valittu." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Hakua vastaavia teemoja ei löytynyt." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Teemoja ei ole vielä tallennettu." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Valitse käänteisen kuvahaun tarjoaja" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Valitse vasemmalta teema muokataksesi sen nimeä, metatietoja ja CSS:ää. Tai tuo uusi teema." @@ -27320,7 +27369,7 @@ msgstr "Poista tallennetusta mediasta" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Älä pysy päällä" @@ -28959,7 +29008,7 @@ msgstr "Tallenna kuvake" msgid "Save some media from messages to get started!" msgstr "Aloita tallentamalla mediaa viesteistä!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Tallenna teema" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Hae verkosta" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Hae teemoja…" @@ -32504,7 +32553,7 @@ msgstr "Pysy täysin interaktiivisena, kun sovellus ei ole aktiivinen" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Pidä päällimmäisenä" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tunniste" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tunnisteet" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Teeman väri" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "Teeman CSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Teemaa ei löydy" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Teema tallennettu." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Tämä hyvittää viimeisimmän laskusi ja peruuttaa siihen liittyvän tilauksen. Et voi tehdä uutta itsepalveluhyvitystä 30 päivään." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Tämä poistaa teeman \"{themeName}\" tältä laitteelta." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Luotetut verkkotunnukset tyhjennetty." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Kokeile toista nimeä tai tyhjennä haku." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Irrota linkki" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Lukemattomien viestien ilmoituskuvake" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Lukemattomia viestejä" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Lukemattomia viestejä: {count}" @@ -36807,7 +36861,7 @@ msgstr "Lukemattomia viestejä: {count}" msgid "Unreads" msgstr "Lukemattomat" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Tallentamattomia muutoksia" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Versio" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Viestin välittäminen ei onnistunut juuri nyt." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Teeman kirjastotiedoston tuonti epäonnistui." diff --git a/fluxer_app/src/features/i18n/locales/fr/messages.po b/fluxer_app/src/features/i18n/locales/fr/messages.po index e7c1bb924..afdd87541 100644 --- a/fluxer_app/src/features/i18n/locales/fr/messages.po +++ b/fluxer_app/src/features/i18n/locales/fr/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# application sélectionnée pour révoquer son accès} other {# applications sélectionnées pour révoquer leur accès}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} ne peut pas atteindre ses serveurs. Il continuera d'essayer en arrière-plan." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} n’a pas pu démarrer" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# salon textuel} many {# salons textuels} other {# salons textuels}}, {voiceChannelCount, plural, one {# salon vocal} many {# salons vocaux} other {# salons vocaux}}, {categoryCount, plural, one {# catégorie} many {# catégories} other {# catégories}}, {roleCount, plural, one {# rôle} many {# rôles} other {# rôles}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Copie de {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Code d'authentification" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Auteur" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Vous n'avez pas accès à cet e-mail ?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Impossible de se connecter" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Impossible de trouver {path}. Utilisation de la dernière version chargée." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Impossible de coller l'image ici" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Impossible de lire {path}. Utilisation de la dernière version chargée." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Bientôt disponible" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "séparés par des virgules" @@ -10817,6 +10827,11 @@ msgstr "Recadrage de {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "Fichiers CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Supprimer la catégorie « {categoryName} » ? Cette action est irréversible." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Supprimer le thème" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Supprimer le thème ?" @@ -13231,7 +13246,7 @@ msgstr "En raison de la législation sur les contenus pour adultes dans votre r msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "En raison de la législation sur les contenus pour adultes dans votre région ({regionName}), ce média n’est pas accessible depuis votre position actuelle." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Dupliquer" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Activer la permission {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Activer {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Découvrir des communautés" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Exporter" @@ -14885,7 +14900,7 @@ msgstr "Exporte tous les messages que vous avez envoyés, ainsi que tous les par msgid "Export GIF URLs" msgstr "Exporter les URL des GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Exporter la bibliothèque" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importer le modèle {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Importez un fichier .css pour commencer, ou collez votre propre CSS dans CSS rapide." @@ -18086,7 +18101,9 @@ msgstr "Importation terminée. {importedCount, plural, one {# GIF ajouté} other msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Importation terminée. {importedCount, plural, one {# GIF ajouté} other {# GIF ajoutés}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importer du CSS" @@ -18098,7 +18115,7 @@ msgstr "Importer des GIF favoris" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importer un dossier" @@ -18107,7 +18124,7 @@ msgstr "Importer un dossier" msgid "Import GIFs" msgstr "Importer des GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importer une bibliothèque" @@ -18150,13 +18167,13 @@ msgstr "Informations importantes :" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "{length, plural, one {# fichier de thème importé} other {# fichiers de thème importés}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Importation terminée : {themes, plural, one {# thème} other {# thèmes}} et {assets, plural, one {# ressource} other {# ressources}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Installation de la mise à jour de l’application de bureau…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Messagerie instantanée et VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Messagerie instantanée" @@ -19903,6 +19920,13 @@ msgstr "Associez des comptes et des domaines externes à votre profil {PRODUCT_N msgid "Link external accounts and domains to your profile" msgstr "Associez des comptes et des domaines externes à votre profil" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Lier le fichier" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Associez votre compte {BLUESKY_PROVIDER_NAME} ou vérifiez la propriét msgid "Linked" msgstr "Associé" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Fichiers de thème liés {length, plural, one {# fichier de thème} other {# fichiers de thème}}. Les modifications que vous enregistrez s'appliquent immédiatement." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Comptes liés" msgid "Linked devices" msgstr "Appareils connectés" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Fichier lié indisponible" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Lié à {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Lié à {path}. Modifiez le fichier dans n'importe quel éditeur et les modifications enregistrées s'appliqueront ici immédiatement." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Lié à un fichier" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Forçages des bandeaux de notification" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "aucun contenu textuel" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Aucun thème sélectionné." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Aucun thème ne correspond à votre recherche." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Aucun thème enregistré pour l'instant." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Choisir un fournisseur de recherche d'images inversée" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Choisissez un thème sur la gauche pour modifier son nom, ses métadonnées et son CSS. Ou importez-en un nouveau." @@ -27320,7 +27369,7 @@ msgstr "Retirer des médias enregistrés" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Retirer de l’affichage permanent" @@ -28959,7 +29008,7 @@ msgstr "Enregistrer l'icône" msgid "Save some media from messages to get started!" msgstr "Enregistrez des médias depuis vos messages pour commencer !" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Enregistrer le thème" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Rechercher sur le Web" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Rechercher des thèmes…" @@ -32504,7 +32553,7 @@ msgstr "Rester entièrement interactif même en arrière-plan" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Garder au premier plan" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tag" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tags" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Couleur du thème" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS du thème" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Thème introuvable" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Thème enregistré." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Cela rembourse votre dernière facture et résilie tout abonnement associé. Vous ne pourrez plus utiliser le remboursement en libre-service pendant 30 jours." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Cela supprime « {themeName} » de cet appareil." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Domaines de confiance effacés." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Essayez un autre nom ou effacez la recherche." @@ -36496,6 +36545,11 @@ msgstr "mention-inconnue" msgid "unknown-role" msgstr "rôle-inconnu" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Détacher" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Badge de messages non lus" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Messages non lus" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Messages non lus : {count}" @@ -36807,7 +36861,7 @@ msgstr "Messages non lus : {count}" msgid "Unreads" msgstr "Non lus" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Modifications non enregistrées" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Version" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Nous n'avons pas pu transférer le message pour le moment." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Nous n'avons pas pu importer ce fichier de bibliothèque de thèmes." diff --git a/fluxer_app/src/features/i18n/locales/he/messages.po b/fluxer_app/src/features/i18n/locales/he/messages.po index 47ee33df8..b73beb989 100644 --- a/fluxer_app/src/features/i18n/locales/he/messages.po +++ b/fluxer_app/src/features/i18n/locales/he/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# אפליקציה נבחרה לביטול גישה} other {# אפליקציות נבחרו לביטול גישה}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} לא מצליח להגיע לשרתים שלו. הוא ימשיך לנסות ברקע." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} לא הצליח לעלות" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# ערוץ טקסט} two {# ערוצי טקסט} other {# ערוצי טקסט}}, {voiceChannelCount, plural, one {# ערוץ קולי} two {# ערוצים קוליים} other {# ערוצים קוליים}}, {categoryCount, plural, one {# קטגוריה} two {# קטגוריות} other {# קטגוריות}}, {roleCount, plural, one {# תפקיד} two {# תפקידים} other {# תפקידים}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "עותק של {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "קוד אימות" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "יוצר" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "אין לך גישה לאימייל הזה?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "לא מצליח להתחבר" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "לא נמצא {path}. משתמשים בגרסה האחרונה שנטענה." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "לא ניתן להדביק תמונה כאן" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "לא ניתן לקרוא את הקובץ {path}. משתמשים בגרסה האחרונה שנטענה." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "בקרוב" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "מופרד בפסיקים" @@ -10817,6 +10827,11 @@ msgstr "חותך {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "קבצי CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "דלאוור" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "למחוק את הקטגוריה \"{categoryName}\"? לא ניתן לבטל פעולה זו." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "מחיקת ערכת נושא" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "למחוק ערכת נושא?" @@ -13231,7 +13246,7 @@ msgstr "בשל חוקי תוכן למבוגרים ב-{regionName}, תוכן זה msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "בשל חוקי תוכן למבוגרים ב-{regionName}, מדיה זו אינה זמינה באזורך הנוכחי." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "שכפול" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "הפעלת הרשאת {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "הפעלת {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "גילוי קהילות" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "ייצוא" @@ -14885,7 +14900,7 @@ msgstr "ייצא את כל ההודעות ששלחת אי פעם, בתוספת msgid "Export GIF URLs" msgstr "ייצוא כתובות GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "ייצוא ספרייה" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "ייבוא תבנית מ-{theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "יש לייבא קובץ .css כדי להתחיל, או להדביק CSS משלך ב-CSS מהיר." @@ -18086,7 +18101,9 @@ msgstr "הייבוא הושלם. נוספו {importedCount, plural, one {# קו msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "הייבוא הושלם. נוספו {importedCount, plural, one {# קובץ GIF} other {# קובצי GIF}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "ייבוא CSS" @@ -18098,7 +18115,7 @@ msgstr "ייבוא קובצי GIF מועדפים" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "ייבוא תיקייה" @@ -18107,7 +18124,7 @@ msgstr "ייבוא תיקייה" msgid "Import GIFs" msgstr "ייבוא קובצי GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "ייבוא ספרייה" @@ -18150,13 +18167,13 @@ msgstr "מידע חשוב:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "יובאו {length, plural, one {# קובץ ערכת נושא} other {# קובצי ערכת נושא}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "יובאו {themes, plural, one {# ערכת נושא} other {# ערכות נושא}} וגם {assets, plural, one {# נכס} other {# נכסים}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "מתקין את עדכון שולחן העבודה…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "מסרים מיידיים ו-VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "תוכנת מסרים מיידיים" @@ -19903,6 +19920,13 @@ msgstr "קשר חשבונות ודומיינים חיצוניים לפרופיל msgid "Link external accounts and domains to your profile" msgstr "קישור חשבונות ודומיינים חיצוניים לפרופיל שלך" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "קשר קובץ" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "קשר את חשבון ה-{BLUESKY_PROVIDER_NAME} שלך או אמת ב msgid "Linked" msgstr "מקושר" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "קבצים מקושרים {length, plural, one {# קובץ ערכת נושא} other {# קבצי ערכות נושא}}. שינויים שתשמרו יחולו מיד." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "חשבונות מקושרים" msgid "Linked devices" msgstr "מכשירים מקושרים" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "הקובץ המקושר אינו זמין" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "מקושר ל-{path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "מקושר אל {path}. ערוך את הקובץ בכל עורך ושינויים שמורים יחולו כאן מיד." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "מקשר לקובץ" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "עקיפות Nagbar" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "אין תוכן טקסט" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "לא נבחרה ערכת נושא." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "אין ערכות נושא התואמות לחיפוש שלך." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "עדיין לא נשמרו ערכות נושא." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "בחירת ספק לחיפוש תמונה הפוך" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "יש לבחור ערכת נושא משמאל כדי לערוך את שמה, את המטא-נתונים שלה ואת ה-CSS שלה. אפשר גם לייבא ערכת נושא חדשה." @@ -27320,7 +27369,7 @@ msgstr "הסרה מהמדיה השמורה" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "בטל הישארות בחלון עליון" @@ -28959,7 +29008,7 @@ msgstr "שמירת אייקון" msgid "Save some media from messages to get started!" msgstr "שמור מדיה מההודעות כדי להתחיל!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "שמירת ערכת נושא" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "חיפוש באינטרנט" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "חיפוש ערכות נושא…" @@ -32504,7 +32553,7 @@ msgstr "הישאר אינטראקטיבי לחלוטין גם כשהחלון א #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "הישאר בחלון עליון" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "תגית" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "תגיות" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "צבע ערכת נושא" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS של ערכת נושא" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "ערכת הנושא לא נמצאה" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "ערכת הנושא נשמרה." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "פעולה זו תזכה אותך על החשבונית האחרונה שלך ותבטל כל מנוי משויך. לא תוכל לבצע החזר עצמי נוסף במשך 30 יום." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "פעולה זו תסיר את \"{themeName}\" מהמכשיר הזה." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "הדומיינים המהימנים נוקו." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "נסה שם אחר או נקה את החיפוש." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "בטל קישור" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "תג הודעות שלא נקראו" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "הודעות שלא נקראו" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "הודעות שלא נקראו: {count}" @@ -36807,7 +36861,7 @@ msgstr "הודעות שלא נקראו: {count}" msgid "Unreads" msgstr "הודעות שלא נקראו" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "שינויים שלא נשמרו" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "ורמונט" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "גרסה" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "לא הצלחנו להעביר את ההודעה כרגע." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "לא הצלחנו לייבא את קובץ ספריית העיצוב הזה." diff --git a/fluxer_app/src/features/i18n/locales/hi/messages.po b/fluxer_app/src/features/i18n/locales/hi/messages.po index 273f1870c..6108a4580 100644 --- a/fluxer_app/src/features/i18n/locales/hi/messages.po +++ b/fluxer_app/src/features/i18n/locales/hi/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {एक्सेस रद्द करने के लिए # ऐप चुना गया} other {एक्सेस रद्द करने के लिए # ऐप्स चुने गए}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} अपने सर्वर तक नहीं पहुँच पा रहा है। यह बैकग्राउंड में कोशिश करता रहेगा।" #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} शुरू नहीं हो सका" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# टेक्स्ट चैनल} other {# टेक्स्ट चैनल}}, {voiceChannelCount, plural, one {# वॉइस चैनल} other {# वॉइस चैनल}}, {categoryCount, plural, =0 {# श्रेणियाँ} one {# श्रेणी} other {# श्रेणियाँ}}, {roleCount, plural, one {# रोल} other {# रोल}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} की कॉपी" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "ऑथेंटिकेटर कोड" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "लेखक" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "उस ईमेल को एक्सेस नहीं कर पा रहे हैं?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "कनेक्ट नहीं हो पा रहा है" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "{path} नहीं मिला। अंतिम लोड किया गया संस्करण उपयोग किया जा रहा है।" + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "यहां इमेज पेस्ट नहीं कर सकते" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "{path} को पढ़ा नहीं जा सकता। अंतिम लोड किए गए संस्करण का उपयोग किया जा रहा है।" + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "जल्द आ रहा है" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "कॉमा से अलग किए गए" @@ -10817,6 +10827,11 @@ msgstr "{percent}% क्रॉप हो रहा है" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS फ़ाइलें" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "डेलावेयर" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "श्रेणी \"{categoryName}\" को हटाएँ? इसे पूर्ववत नहीं किया जा सकता है।" #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "थीम मिटाएँ" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "थीम मिटाएँ?" @@ -13231,7 +13246,7 @@ msgstr "{regionName} में वयस्क सामग्री के क msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "{regionName} में वयस्क सामग्री के कानूनों के कारण, यह मीडिया आपके मौजूदा क्षेत्र में उपलब्ध नहीं है।" -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "डुप्लिकेट करें" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "{permissionName} अनुमति चालू करें" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "{themeName} चालू करें" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "कम्युनिटी एक्सप्लोर करें" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "एक्सपोर्ट करें" @@ -14885,7 +14900,7 @@ msgstr "आपके द्वारा भेजे गए सभी मैस msgid "Export GIF URLs" msgstr "GIF यूआरएल एक्सपोर्ट करें" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "लाइब्रेरी एक्सपोर्ट करें" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "{theOtherPlatform} टेम्पलेट इंपोर्ट करें" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "शुरू करने के लिए एक .css फ़ाइल इंपोर्ट करें या क्विक CSS में अपना CSS पेस्ट करें।" @@ -18086,7 +18101,9 @@ msgstr "इंपोर्ट पूरा हुआ। {importedCount, plural, msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "इंपोर्ट पूरा हुआ। {importedCount, plural, one {# GIF जोड़ा गया} other {# GIF जोड़े गए}}।" -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "CSS इंपोर्ट करें" @@ -18098,7 +18115,7 @@ msgstr "पसंदीदा GIF इंपोर्ट करें" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "फ़ोल्डर इंपोर्ट करें" @@ -18107,7 +18124,7 @@ msgstr "फ़ोल्डर इंपोर्ट करें" msgid "Import GIFs" msgstr "GIF इंपोर्ट करें" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "लाइब्रेरी इंपोर्ट करें" @@ -18150,13 +18167,13 @@ msgstr "ज़रूरी जानकारी:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "{length, plural, one {# थीम फ़ाइल इंपोर्ट की गई} other {# थीम फ़ाइलें इंपोर्ट की गईं}}।" #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "{themes, plural, one {# थीम} other {# थीम}} और {assets, plural, one {# एसेट} other {# एसेट}} इंपोर्ट किए गए।" @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "डेस्कटॉप अपडेट इंस्टॉल हो रहा है…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "इंस्टेंट मैसेजिंग और VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "इंस्टेंट मैसेंजर" @@ -19903,6 +19920,13 @@ msgstr "अपनी {PRODUCT_NAME} प्रोफ़ाइल से बाह msgid "Link external accounts and domains to your profile" msgstr "अपनी प्रोफ़ाइल से बाहरी अकाउंट और डोमेन लिंक करें" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "फ़ाइल लिंक करें" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "अपनी प्रोफ़ाइल पर दिखाने क msgid "Linked" msgstr "लिंक किया गया" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "लिंक की गई {length, plural, one {# थीम फ़ाइल} other {# थीम फ़ाइलें}}। इनमें किए गए बदलाव सेव करते ही लागू हो जाएंगे।" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "लिंक किए गए अकाउंट" msgid "Linked devices" msgstr "लिंक किए गए डिवाइस" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "लिंक की गई फ़ाइल उपलब्ध नहीं है" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "{path} से लिंक किया गया।" + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "{path} से लिंक किया गया। किसी भी संपादक में फ़ाइल संपादित करें और सहेजे गए परिवर्तन तुरंत यहाँ लागू हो जाएँगे।" + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "फ़ाइल से लिंक" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "नैगबार ओवरराइड" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "कोई टेक्स्ट सामग्री नहीं" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "कोई थीम नहीं चुनी गई है।" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "आपकी खोज से कोई थीम मेल नहीं खाती।" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "अभी तक कोई थीम सेव नहीं की गई है।" @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "रिवर्स इमेज सर्च प्रोवाइडर चुनें" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "नाम, मेटाडेटा और CSS एडिट करने के लिए बाईं ओर से कोई थीम चुनें। या कोई नई थीम इंपोर्ट करें।" @@ -27320,7 +27369,7 @@ msgstr "सेव किए गए मीडिया से हटाएँ" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "सबसे ऊपर रखना बंद करें" @@ -28959,7 +29008,7 @@ msgstr "आइकॉन सेव करें" msgid "Save some media from messages to get started!" msgstr "शुरू करने के लिए मैसेज से कुछ मीडिया सेव करें!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "थीम सेव करें" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "वेब पर खोजें" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "थीम खोजें…" @@ -32504,7 +32553,7 @@ msgstr "फ़ोकस में न होने पर भी पूरी #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "सबसे ऊपर रखें" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "टैग" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "टैग" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "थीम का रंग" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "थीम CSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "थीम नहीं मिली" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "थीम सेव हो गई।" @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "इससे आपके सबसे हाल के इनवॉइस का रिफंड हो जाता है और उससे जुड़ी कोई भी सदस्यता रद्द हो जाती है। इसके बाद आप 30 दिन तक फिर से खुद रिफंड नहीं ले पाएंगे।" #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "यह \"{themeName}\" को इस डिवाइस से हटा देगा।" @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "भरोसेमंद डोमेन हटा दिए गए हैं।" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "कोई दूसरा नाम आज़माएँ या खोज साफ़ करें।" @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "अनलिंक करें" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "न पढ़े गए मैसेज का बैज" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "अपठित मैसेज" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "अपठित मैसेज: {count}" @@ -36807,7 +36861,7 @@ msgstr "अपठित मैसेज: {count}" msgid "Unreads" msgstr "अपठित" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "सेव नहीं किए गए बदलाव" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "वरमोंट" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "वर्ज़न" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "हम इस समय मैसेज फ़ॉरवर्ड नहीं कर पाए।" #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "हम उस थीम लाइब्रेरी फ़ाइल को इंपोर्ट नहीं कर पाए।" diff --git a/fluxer_app/src/features/i18n/locales/hr/messages.po b/fluxer_app/src/features/i18n/locales/hr/messages.po index 2120006c7..f7fc38c27 100644 --- a/fluxer_app/src/features/i18n/locales/hr/messages.po +++ b/fluxer_app/src/features/i18n/locales/hr/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# aplikacija odabrana za opoziv pristupa} few {# aplikacije odabrane za opoziv pristupa} other {# aplikacija odabrano za opoziv pristupa}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} ne može doći do svojih poslužitelja. Nastavit će pokušavati u pozadini." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} se nije uspio pokrenuti" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# tekstualni kanal} few {# tekstualna kanala} other {# tekstualnih kanala}}, {voiceChannelCount, plural, one {# glasovni kanal} few {# glasovna kanala} other {# glasovnih kanala}}, {categoryCount, plural, one {# kategorija} few {# kategorije} other {# kategorija}}, {roleCount, plural, one {# uloga} few {# uloge} other {# uloga}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} (kopija)" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Kôd za autentifikaciju" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Autor" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Nemate pristup toj adresi e-pošte?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Ne mogu se povezati" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Ne možemo pronaći {path}. Koristimo zadnju učitanu verziju." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Ovdje nije moguće zalijepiti sliku" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Ne možemo pročitati {path}. Koristimo zadnju učitanu verziju." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Uskoro" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "odvojeno zarezom" @@ -10817,6 +10827,11 @@ msgstr "Obrezivanje {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS datoteke" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Izbrisati kategoriju \"{categoryName}\"? Ovo se ne može poništiti." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Izbriši temu" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Izbrisati temu?" @@ -13231,7 +13246,7 @@ msgstr "Zbog zakona o sadržaju za odrasle u regiji {regionName}, ovaj sadržaj msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Zbog zakona o sadržaju za odrasle u regiji {regionName}, ovaj medij nije dostupan u vašoj trenutačnoj regiji." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Dupliciraj" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Omogući dopuštenje {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Omogući {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Istraži zajednice" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Izvezi" @@ -14885,7 +14900,7 @@ msgstr "Izvezite svaku poruku koju ste ikada poslali te sve postavke računa, č msgid "Export GIF URLs" msgstr "Izvezi GIF URL-ove" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Izvezi biblioteku" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Uvezi predložak za {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Uvezite .css datoteku za početak ili zalijepite vlastiti CSS u Brzi CSS." @@ -18086,7 +18101,9 @@ msgstr "Uvoz dovršen. Dodano {importedCount, plural, one {# GIF} few {# GIF-a} msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Uvoz dovršen. Dodano je {importedCount, plural, one {# GIF} few {# GIF-a} other {# GIF-ova}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Uvezi CSS" @@ -18098,7 +18115,7 @@ msgstr "Uvezi omiljene GIF-ove" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Uvezi mapu" @@ -18107,7 +18124,7 @@ msgstr "Uvezi mapu" msgid "Import GIFs" msgstr "Uvezi GIF-ove" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Uvezi biblioteku" @@ -18150,13 +18167,13 @@ msgstr "Važne informacije:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Uvezeno {length, plural, one {# datoteka teme} few {# datoteke teme} other {# datoteka teme}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Uvezeno je {themes, plural, one {# tema} few {# teme} other {# tema}} i {assets, plural, one {# resurs} few {# resursa} other {# resursa}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Instaliranje ažuriranja za stolno računalo…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Razmjena trenutačnih poruka i VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Program za razmjenu poruka" @@ -19903,6 +19920,13 @@ msgstr "Povežite vanjske račune i domene sa svojim profilom na {PRODUCT_NAME}u msgid "Link external accounts and domains to your profile" msgstr "Povežite vanjske račune i domene sa svojim profilom" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Poveži datoteku" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Povežite svoj {BLUESKY_PROVIDER_NAME} račun ili potvrdite vlasništvo msgid "Linked" msgstr "Povezano" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Povezana {length, plural, one {# datoteka s temom} other {# datoteke s temama}}. Promjene koje spremite na njima primjenjuju se odmah." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Povezani računi" msgid "Linked devices" msgstr "Povezani uređaji" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Povezana datoteka nije dostupna" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Povezano s {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Povezano s {path}. Uredite datoteku u bilo kojem uređivaču i spremljene promjene odmah će se primijeniti ovdje." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Povezano s datotekom" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Nadjačavanja nagbarova" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "nema tekstualnog sadržaja" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Nijedna tema nije odabrana." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Nijedna tema ne odgovara vašoj pretrazi." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Još nema spremljenih tema." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Odaberite pružatelja obrnute pretrage slika" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Odaberite temu s lijeve strane za uređivanje naziva, metapodataka i CSS-a. Ili uvezite novu." @@ -27320,7 +27369,7 @@ msgstr "Ukloni iz spremljenih medija" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Ukloni s vrha" @@ -28959,7 +29008,7 @@ msgstr "Spremi ikonu" msgid "Save some media from messages to get started!" msgstr "Spremite neke medije iz poruka da biste započeli!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Spremi temu" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Pretraži web" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Pretražite teme…" @@ -32504,7 +32553,7 @@ msgstr "Potpuna interaktivnost dok je prozor neaktivan" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Uvijek na vrhu" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Oznaka" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Oznake" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Boja teme" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS teme" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Tema nije pronađena" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Tema je spremljena." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Ovo vraća novac za vašu najnoviju fakturu i otkazuje sve povezane pretplate. Nećete moći sami zatražiti povrat novca sljedećih 30 dana." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Ovo uklanja \"{themeName}\" s ovog uređaja." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Pouzdane domene izbrisane." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Pokušajte s drugim imenom ili obrišite pretraživanje." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Prekini vezu" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Značka za nepročitane poruke" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Nepročitane poruke" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Nepročitane poruke: {count}" @@ -36807,7 +36861,7 @@ msgstr "Nepročitane poruke: {count}" msgid "Unreads" msgstr "Nepročitano" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Nespremljene promjene" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Verzija" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Trenutno ne možemo proslijediti poruku." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Nismo uspjeli uvesti datoteku biblioteke tema." diff --git a/fluxer_app/src/features/i18n/locales/hu/messages.po b/fluxer_app/src/features/i18n/locales/hu/messages.po index 206110728..b0a600c6b 100644 --- a/fluxer_app/src/features/i18n/locales/hu/messages.po +++ b/fluxer_app/src/features/i18n/locales/hu/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# alkalmazás kiválasztva a hozzáférés visszavonásához} other {# alkalmazás kiválasztva a hozzáférés visszavonásához}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "A(z) {appName} nem tudja elérni a szervereit. A háttérben továbbra is próbálkozni fog." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "A(z) {appName} nem tudott elindulni" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# szöveges csatorna} other {# szöveges csatorna}}, {voiceChannelCount, plural, one {# hangcsatorna} other {# hangcsatorna}}, {categoryCount, plural, one {# kategória} other {# kategória}}, {roleCount, plural, one {# szerepkör} other {# szerepkör}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} másolata" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Hitelesítő kód" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Szerző" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Nem férsz hozzá ehhez az e-mail-címhez?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Nem tud csatlakozni" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Nem található: {path}. Az utoljára betöltött verziót használjuk." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Ide nem illeszthető be kép" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Nem olvasható: {path}. Az utolsó betöltött verziót használjuk." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Hamarosan" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "vesszővel elválasztva" @@ -10817,6 +10827,11 @@ msgstr "Kivágás {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS fájlok" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Törlöd a(z) „{categoryName}” kategóriát? Ez a művelet nem vonható vissza." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Téma törlése" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Törlöd a témát?" @@ -13231,7 +13246,7 @@ msgstr "A(z) {regionName} régióban érvényes, felnőtt tartalomra vonatkozó msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "A(z) {regionName} régióban érvényes, felnőtt tartalomra vonatkozó törvények miatt ez a média nem érhető el a jelenlegi régiódból." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Másolás" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "{permissionName} jogosultság engedélyezése" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "{themeName} engedélyezése" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Közösségek felfedezése" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Exportálás" @@ -14885,7 +14900,7 @@ msgstr "Exportáld az összes valaha elküldött üzenetedet, valamint az össze msgid "Export GIF URLs" msgstr "GIF URL-ek exportálása" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Könyvtár exportálása" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Sablon importálása a(z) {theOtherPlatform} platformról" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Kezdéshez importálj egy .css fájlt, vagy illeszd be a saját CSS-edet a Gyors CSS-be." @@ -18086,7 +18101,9 @@ msgstr "Az importálás befejeződött. Hozzáadva: {importedCount, plural, one msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Importálás kész. Hozzáadva: {importedCount, plural, one {# GIF} other {# GIF}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "CSS importálása" @@ -18098,7 +18115,7 @@ msgstr "Kedvenc GIF-ek importálása" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Mappa importálása" @@ -18107,7 +18124,7 @@ msgstr "Mappa importálása" msgid "Import GIFs" msgstr "GIF-ek importálása" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Könyvtár importálása" @@ -18150,13 +18167,13 @@ msgstr "Fontos információ:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Importálva: {length, plural, one {# témafájl} other {# témafájl}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Importálva: {themes, plural, one {# téma} other {# téma}} és {assets, plural, one {# erőforrás} other {# erőforrás}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Asztali frissítés telepítése…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Azonnali üzenetküldés és VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Azonnali üzenetküldő" @@ -19903,6 +19920,13 @@ msgstr "Külső fiókok és domainek összekapcsolása a {PRODUCT_NAME} profilod msgid "Link external accounts and domains to your profile" msgstr "Külső fiókok és domainek összekapcsolása a profiloddal" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Fájl csatolása" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Kapcsold össze a {BLUESKY_PROVIDER_NAME} fiókodat, vagy igazolj domain msgid "Linked" msgstr "Összekapcsolva" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Hivatkozás: {length, plural, one {# témafájl} other {# témafájl}}. A mentett módosítások azonnal érvényesülnek." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Kapcsolt fiókok" msgid "Linked devices" msgstr "Összekapcsolt eszközök" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Hivatkozott fájl nem érhető el" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Hivatkozás: {path}" + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Hivatkozás: {path}. Szerkeszd a fájlt bármelyik szerkesztőben, és a mentett módosítások azonnal érvényesülnek itt." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Hivatkozás egy fájlra" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Figyelmeztető sávok felülbírálása" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "nincs szöveges tartalom" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Nincs kiválasztott téma." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Nincs a keresésnek megfelelő téma." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Még nincsenek mentett témák." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Válassz egy fordított képkereső szolgáltatót" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Válassz egy témát bal oldalon a nevének, metaadatainak és CSS-ének szerkesztéséhez. Vagy importálj egy újat." @@ -27320,7 +27369,7 @@ msgstr "Eltávolítás a mentett média közül" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Mindig felül beállítás kikapcsolása" @@ -28959,7 +29008,7 @@ msgstr "Ikon mentése" msgid "Save some media from messages to get started!" msgstr "Ments el néhány médiafájlt az üzenetekből a kezdéshez!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Téma mentése" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Keresés az interneten" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Témák keresése…" @@ -32504,7 +32553,7 @@ msgstr "Teljesen interaktív marad, ha nincs fókuszban" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Mindig felül" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Címke" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Címkék" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Témaszín" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "Téma CSS-e" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "A téma nem található" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Téma elmentve." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Ez visszatéríti a legutóbbi számlád összegét, és megszünteti a hozzá kapcsolódó előfizetést. Ezután 30 napig nem kérhetsz újabb önkiszolgáló visszatérítést." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Ezzel eltávolítja a(z) „{themeName}” témát erről az eszközről." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Megbízható domainek törölve." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Próbálj másik nevet, vagy töröld a keresést." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Hivatkozás megszüntetése" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Olvasatlan üzenetek jelvénye" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Olvasatlan üzenetek" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Olvasatlan üzenetek: {count}" @@ -36807,7 +36861,7 @@ msgstr "Olvasatlan üzenetek: {count}" msgid "Unreads" msgstr "Olvasatlanok" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Nem mentett változások" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Verzió" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Jelenleg nem tudtuk továbbítani az üzenetet." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Nem sikerült importálni a témakönyvtár fájlját." diff --git a/fluxer_app/src/features/i18n/locales/id/messages.po b/fluxer_app/src/features/i18n/locales/id/messages.po index ad6c0ee10..76dd421c6 100644 --- a/fluxer_app/src/features/i18n/locales/id/messages.po +++ b/fluxer_app/src/features/i18n/locales/id/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# aplikasi dipilih untuk pencabutan akses} other {# aplikasi dipilih untuk pencabutan akses}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} tidak dapat menjangkau servernya. Aplikasi akan terus mencoba di latar belakang." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} gagal dijalankan" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, other {# saluran teks}}, {voiceChannelCount, plural, other {# saluran suara}}, {categoryCount, plural, other {# kategori}}, {roleCount, plural, other {# peran}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Salinan {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Kode autentikator" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Pembuat" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Tidak bisa mengakses email itu?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Tidak dapat terhubung" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Tidak dapat menemukan {path}. Menggunakan versi terakhir yang dimuat." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Tidak bisa menempel gambar di sini" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Tidak dapat membaca {path}. Menggunakan versi terakhir yang dimuat." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Segera hadir" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "dipisahkan, dengan koma" @@ -10817,6 +10827,11 @@ msgstr "Memotong {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "File CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Hapus kategori \"{categoryName}\"? Tidak dapat dibatalkan." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Hapus tema" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Hapus tema?" @@ -13231,7 +13246,7 @@ msgstr "Karena undang-undang konten dewasa di {regionName}, konten ini tidak ter msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Karena undang-undang konten dewasa di {regionName}, media ini tidak tersedia di wilayahmu saat ini." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplikat" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Aktifkan izin {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Aktifkan {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Jelajahi komunitas" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Ekspor" @@ -14885,7 +14900,7 @@ msgstr "Ekspor semua pesan yang pernah kamu kirim, ditambah semua pengaturan aku msgid "Export GIF URLs" msgstr "Ekspor URL GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Ekspor pustaka" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Impor template {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Impor file .css untuk memulai, atau tempel CSS milikmu di CSS cepat." @@ -18086,7 +18101,9 @@ msgstr "Impor selesai. Ditambahkan {importedCount, plural, one {# GIF} other {# msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Impor selesai. Ditambahkan {importedCount, plural, one {# GIF} other {# GIF}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Impor CSS" @@ -18098,7 +18115,7 @@ msgstr "Impor GIF favorit" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Impor folder" @@ -18107,7 +18124,7 @@ msgstr "Impor folder" msgid "Import GIFs" msgstr "Impor GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Impor pustaka" @@ -18150,13 +18167,13 @@ msgstr "Informasi penting:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Berhasil mengimpor {length, plural, one {# file tema} other {# file tema}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Berhasil mengimpor {themes, plural, one {# tema} other {# tema}} dan {assets, plural, one {# aset} other {# aset}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Menginstal pembaruan desktop…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Pesan instan dan VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Pesan instan" @@ -19903,6 +19920,13 @@ msgstr "Tautkan akun dan domain eksternal ke profil {PRODUCT_NAME} kamu. Koneksi msgid "Link external accounts and domains to your profile" msgstr "Tautkan akun dan domain eksternal ke profilmu" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Tautkan file" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Tautkan akun {BLUESKY_PROVIDER_NAME} kamu atau verifikasi kepemilikan do msgid "Linked" msgstr "Tertaut" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Terkait {length, plural, one {# file tema} other {# file tema}}. Perubahan yang Anda simpan akan langsung berlaku." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Akun tertaut" msgid "Linked devices" msgstr "Perangkat tertaut" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "File tertaut tidak tersedia" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Tertaut ke {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Tertaut ke {path}. Edit file di editor mana pun dan perubahan yang disimpan akan langsung berlaku di sini." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Tertaut ke file" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Penggantian bilah notifikasi" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "tidak ada konten teks" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Tidak ada tema yang dipilih." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Tidak ada tema yang cocok dengan pencarianmu." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Belum ada tema yang tersimpan." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Pilih penyedia pencarian gambar terbalik" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Pilih tema di sebelah kiri untuk mengedit nama, metadata, dan CSS-nya. Atau impor tema baru." @@ -27320,7 +27369,7 @@ msgstr "Hapus dari media tersimpan" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Jangan tetap di atas" @@ -28959,7 +29008,7 @@ msgstr "Simpan ikon" msgid "Save some media from messages to get started!" msgstr "Simpan beberapa media dari pesan untuk memulai!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Simpan tema" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Cari di web" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Cari tema…" @@ -32504,7 +32553,7 @@ msgstr "Tetap interaktif penuh saat tidak fokus" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Tetap di atas" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tag" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tag" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Warna tema" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS tema" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Tema tidak ditemukan" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Tema disimpan." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Ini mengembalikan dana tagihan terbarumu dan membatalkan langganan terkait. Kamu tidak akan bisa mengembalikan dana sendiri lagi selama 30 hari." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Ini akan menghapus \"{themeName}\" dari perangkat ini." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Domain tepercaya sudah dihapus." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Coba nama lain atau hapus pencarian." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Putuskan Tautan" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Lencana pesan belum dibaca" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Pesan belum dibaca" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Pesan belum dibaca: {count}" @@ -36807,7 +36861,7 @@ msgstr "Pesan belum dibaca: {count}" msgid "Unreads" msgstr "Belum dibaca" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Perubahan belum disimpan" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Versi" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Kami tidak bisa meneruskan pesan ini sekarang." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Kami tidak bisa mengimpor file pustaka tema itu." diff --git a/fluxer_app/src/features/i18n/locales/it/messages.po b/fluxer_app/src/features/i18n/locales/it/messages.po index af9e7aaeb..172221847 100644 --- a/fluxer_app/src/features/i18n/locales/it/messages.po +++ b/fluxer_app/src/features/i18n/locales/it/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# app selezionata per la revoca dell’accesso} other {# app selezionate per la revoca dell’accesso}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} non riesce a raggiungere i suoi server. Continuerà a provare in background." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "Impossibile avviare {appName}" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# canale testuale} many {# canali testuali} other {# canali testuali}}, {voiceChannelCount, plural, one {# canale vocale} many {# canali vocali} other {# canali vocali}}, {categoryCount, plural, one {# categoria} many {# categorie} other {# categorie}}, {roleCount, plural, one {# ruolo} many {# ruoli} other {# ruoli}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Copia di {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Codice dell’app di autenticazione" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Autore" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Non riesci ad accedere a quell'email?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Impossibile connettersi" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Impossibile trovare {path}. Utilizzo l'ultima versione caricata." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Impossibile incollare l'immagine qui" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Impossibile leggere {path}. Utilizzo dell'ultima versione caricata." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Prossimamente" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "separati, da virgole" @@ -10817,6 +10827,11 @@ msgstr "Ritagliando il {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "File CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Eliminare la categoria \"{categoryName}\"? Non sarà possibile annullare l'operazione." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Elimina tema" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Eliminare il tema?" @@ -13231,7 +13246,7 @@ msgstr "A causa delle leggi sui contenuti per adulti in {regionName}, questo con msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "A causa delle leggi sui contenuti per adulti in {regionName}, questo contenuto multimediale non è disponibile nella tua regione attuale." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplica" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Abilita l'autorizzazione {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Abilita {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Esplora community" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Esporta" @@ -14885,7 +14900,7 @@ msgstr "Esporta ogni messaggio che hai inviato, più tutte le impostazioni del t msgid "Export GIF URLs" msgstr "Esporta URL GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Esporta libreria" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importa il modello da {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Importa un file .css per iniziare, oppure incolla il tuo CSS in CSS rapido." @@ -18086,7 +18101,9 @@ msgstr "Importazione completata. {importedCount, plural, one {Aggiunta # GIF.} o msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Importazione completata. {importedCount, plural, one {Aggiunta # GIF.} other {Aggiunte # GIF.}}" -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importa CSS" @@ -18098,7 +18115,7 @@ msgstr "Importa GIF preferite" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importa cartella" @@ -18107,7 +18124,7 @@ msgstr "Importa cartella" msgid "Import GIFs" msgstr "Importa GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importa libreria" @@ -18150,13 +18167,13 @@ msgstr "Informazioni importanti:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "{length, plural, one {Importato # file di tema.} other {Importati # file di tema.}}" #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Importati {themes, plural, one {# tema} other {# temi}} e {assets, plural, one {# risorsa} other {# risorse}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Installazione aggiornamento desktop…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Messaggistica istantanea e VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Messaggistica istantanea" @@ -19903,6 +19920,13 @@ msgstr "Collega account e domini esterni al tuo profilo {PRODUCT_NAME}. I colleg msgid "Link external accounts and domains to your profile" msgstr "Collega account e domini esterni al tuo profilo" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Collega file" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Collega il tuo account {BLUESKY_PROVIDER_NAME} o verifica la proprietà msgid "Linked" msgstr "Collegato" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "File collegato {length, plural, one {# tema} other {# temi}}. Le modifiche salvate verranno applicate subito." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Account collegati" msgid "Linked devices" msgstr "Dispositivi collegati" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "File collegato non disponibile" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Collegato a {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Collegato a {path}. Modifica il file in qualsiasi editor e le modifiche salvate verranno applicate qui subito." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Collegato a un file" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Override barra di notifica" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "nessun contenuto di testo" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Nessun tema selezionato." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Nessun tema corrisponde alla tua ricerca." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Nessun tema ancora salvato." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Scegli un provider per la ricerca inversa di immagini" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Scegli un tema a sinistra per modificarne il nome, i metadati e i CSS. Oppure importane uno nuovo." @@ -27320,7 +27369,7 @@ msgstr "Rimuovi dai media salvati" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Disattiva sempre in primo piano" @@ -28959,7 +29008,7 @@ msgstr "Salva icona" msgid "Save some media from messages to get started!" msgstr "Salva dei media dai messaggi per iniziare!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Salva tema" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Cerca sul web" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Cerca temi…" @@ -32504,7 +32553,7 @@ msgstr "Rimani completamente interattivo quando non in primo piano" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Mantieni la finestra in primo piano" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tag" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tag" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Colore tema" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS tema" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Tema non trovato" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Tema salvato." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Questo rimborserà la tua fattura più recente e annullerà qualsiasi abbonamento associato. Non potrai più richiedere un rimborso automatico per 30 giorni." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Così facendo, \"{themeName}\" verrà rimosso da questo dispositivo." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Domini attendibili cancellati." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Prova un nome diverso o cancella la ricerca." @@ -36496,6 +36545,11 @@ msgstr "menzione-sconosciuta" msgid "unknown-role" msgstr "ruolo-sconosciuto" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Scollega" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Badge messaggi non letti" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Messaggi non letti" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Messaggi non letti: {count}" @@ -36807,7 +36861,7 @@ msgstr "Messaggi non letti: {count}" msgid "Unreads" msgstr "Non letti" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Modifiche non salvate" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Versione" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Non è stato possibile inoltrare il messaggio in questo momento." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Non è stato possibile importare il file della libreria di temi." diff --git a/fluxer_app/src/features/i18n/locales/ja/messages.po b/fluxer_app/src/features/i18n/locales/ja/messages.po index cc6a0b63e..110b0d437 100644 --- a/fluxer_app/src/features/i18n/locales/ja/messages.po +++ b/fluxer_app/src/features/i18n/locales/ja/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {アクセスを取り消すアプリを#件選択中} other {アクセスを取り消すアプリを#件選択中}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} はサーバーに接続できません。バックグラウンドで接続を試み続けます。" #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName}を起動できませんでした" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, other {#個のテキストチャンネル}}、{voiceChannelCount, plural, other {#個のボイスチャンネル}}、{categoryCount, plural, other {#個のカテゴリ}}、{roleCount, plural, other {#個のロール}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName}のコピー" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "認証コード" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "作者" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "そのメールアドレスにアクセスできませんか?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "接続できません" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "{path} が見つかりませんでした。最後に読み込まれたバージョンを使用しています。" + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "ここに画像を貼り付けられません" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "{path} を読み込めませんでした。最後に読み込まれたバージョンを使用しています。" + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "近日公開" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "カンマ区切り" @@ -10817,6 +10827,11 @@ msgstr "{percent}%を切り抜き中" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSSファイル" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "デラウェア州" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "カテゴリ「{categoryName}」を削除しますか?この操作は元に戻せません。" #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "テーマを削除" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "テーマを削除しますか?" @@ -13231,7 +13246,7 @@ msgstr "{regionName}の成人向けコンテンツ規制法により、このコ msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "{regionName}の成人向けコンテンツ規制法により、このメディアは現在の地域ではご利用いただけません。" -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "複製" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "{permissionName}の権限を有効にする" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "{themeName}を有効にする" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "コミュニティを探す" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "エクスポート" @@ -14885,7 +14900,7 @@ msgstr "送信したすべてのメッセージ、アカウント設定、メン msgid "Export GIF URLs" msgstr "GIFのURLをエクスポート" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "ライブラリをエクスポート" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "{theOtherPlatform}テンプレートをインポート" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "始めるには.cssファイルをインポートするか、クイックCSSに独自のCSSを貼り付けてください。" @@ -18086,7 +18101,9 @@ msgstr "インポートが完了しました。{importedCount, plural, one {#件 msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "インポートが完了しました。{importedCount, plural, one {#件のGIF} other {#件のGIF}}を追加しました。" -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "CSSをインポート" @@ -18098,7 +18115,7 @@ msgstr "お気に入りのGIFをインポート" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "フォルダーをインポート" @@ -18107,7 +18124,7 @@ msgstr "フォルダーをインポート" msgid "Import GIFs" msgstr "GIFをインポート" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "ライブラリをインポート" @@ -18150,13 +18167,13 @@ msgstr "重要事項:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "{length, plural, one {#件のテーマファイル} other {#件のテーマファイル}}をインポートしました。" #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "{themes, plural, one {#件のテーマ} other {#件のテーマ}}と{assets, plural, one {#件のアセット} other {#件のアセット}}をインポートしました。" @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "デスクトップ版をアップデート中…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "インスタントメッセージとVoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "インスタントメッセンジャー" @@ -19903,6 +19920,13 @@ msgstr "{PRODUCT_NAME}プロフィールに外部アカウントとドメイン msgid "Link external accounts and domains to your profile" msgstr "外部アカウントとドメインをプロフィールにリンク" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "ファイルをリンク" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "プロフィールに表示するには、{BLUESKY_PROVIDER_NAME}アカ msgid "Linked" msgstr "連携済み" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "リンクされたテーマファイル{length, plural, one {# 件} other {# 件}}。保存した変更はすぐに適用されます。" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "連携済みアカウント" msgid "Linked devices" msgstr "リンク済みデバイス" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "リンクされたファイルがありません" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "{path} にリンクしました。" + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "{path} にリンクされています。エディターでファイルを編集して保存すると、すぐにここで変更が適用されます。" + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "ファイルにリンク済み" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Nagbar の上書き" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "テキストコンテンツなし" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "テーマが選択されていません。" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "検索条件に一致するテーマはありません。" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "テーマはまだ保存されていません。" @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "画像検索プロバイダーを選択" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "左側でテーマを選択して、名前、メタデータ、CSSを編集するか、新しいテーマをインポートしてください。" @@ -27320,7 +27369,7 @@ msgstr "保存済みメディアから削除" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "最前面表示を解除" @@ -28959,7 +29008,7 @@ msgstr "アイコンを保存" msgid "Save some media from messages to get started!" msgstr "メッセージからメディアを保存して始めましょう!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "テーマを保存" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "ウェブを検索" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "テーマを検索…" @@ -32504,7 +32553,7 @@ msgstr "非アクティブ時も操作を続ける" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "常に最前面に表示" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "タグ" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "タグ" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "テーマカラー" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "テーマCSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "テーマが見つかりません" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "テーマを保存しました。" @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "最新の請求書が払い戻され、関連するサブスクリプションはすべてキャンセルされます。30日間は再度ご自身で払い戻しを行うことはできません。" #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "これにより、このデバイスから「{themeName}」が削除されます。" @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "信頼済みドメインをクリアしました。" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "別の名前を試すか、検索をクリアしてください。" @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "リンク解除" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "未読メッセージバッジ" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "未読メッセージ" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "未読メッセージ: {count}件" @@ -36807,7 +36861,7 @@ msgstr "未読メッセージ: {count}件" msgid "Unreads" msgstr "未読" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "未保存の変更" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "バーモント州" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "バージョン" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "現在、メッセージを転送できませんでした。" #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "テーマライブラリファイルをインポートできませんでした。" diff --git a/fluxer_app/src/features/i18n/locales/ko/messages.po b/fluxer_app/src/features/i18n/locales/ko/messages.po index 7b4f6b601..45ee93541 100644 --- a/fluxer_app/src/features/i18n/locales/ko/messages.po +++ b/fluxer_app/src/features/i18n/locales/ko/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {액세스 권한을 취소할 앱 #개를 선택했습니다} other {액세스 권한을 취소할 앱 #개를 선택했습니다}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} 서버에 연결할 수 없습니다. 백그라운드에서 계속 시도합니다." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName}을(를) 시작하지 못했습니다" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, other {텍스트 채널 #개}}, {voiceChannelCount, plural, other {음성 채널 #개}}, {categoryCount, plural, other {카테고리 #개}}, {roleCount, plural, other {역할 #개}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} 복사본" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "인증 코드" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "제작자" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "이메일에 접근할 수 없나요?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "연결할 수 없음" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "{path}을(를) 찾을 수 없습니다. 마지막으로 로드된 버전을 사용합니다." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "여기에 이미지를 붙여넣을 수 없습니다" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "{path}을(를) 읽을 수 없습니다. 마지막으로 로드된 버전을 사용합니다." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "출시 예정" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "쉼표로 구분" @@ -10817,6 +10827,11 @@ msgstr "{percent}% 잘라내는 중" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS 파일" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "델라웨어" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "카테고리 \"{categoryName}\"을(를) 삭제하시겠어요? 이 작업은 되돌릴 수 없습니다." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "테마 삭제" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "테마를 삭제할까요?" @@ -13231,7 +13246,7 @@ msgstr "{regionName}의 성인 콘텐츠 관련 법규로 인해 이 콘텐츠 msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "{regionName}의 성인 콘텐츠 관련 법규에 따라 현재 지역에서는 이 미디어를 이용할 수 없습니다." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "복제" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "{permissionName} 권한 허용" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "{themeName} 활성화" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "커뮤니티 둘러보기" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "내보내기" @@ -14885,7 +14900,7 @@ msgstr "지금까지 보낸 모든 메시지, 계정 설정, 멤버십, 메타 msgid "Export GIF URLs" msgstr "GIF URL 내보내기" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "라이브러리 내보내기" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "{theOtherPlatform} 템플릿 가져오기" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr ".css 파일을 가져오거나 빠른 CSS에 직접 CSS를 붙여넣어 시작하세요." @@ -18086,7 +18101,9 @@ msgstr "가져오기 완료. GIF {importedCount, plural, one {#개} other {#개} msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "가져오기 완료. GIF {importedCount, plural, one {#개} other {#개}}를 추가했습니다." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "CSS 가져오기" @@ -18098,7 +18115,7 @@ msgstr "즐겨찾는 GIF 가져오기" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "폴더 가져오기" @@ -18107,7 +18124,7 @@ msgstr "폴더 가져오기" msgid "Import GIFs" msgstr "GIF 가져오기" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "라이브러리 가져오기" @@ -18150,13 +18167,13 @@ msgstr "중요 안내:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "테마 파일 {length, plural, one {#개} other {#개}}를 가져왔습니다." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "테마 {themes, plural, one {#개} other {#개}}와 에셋 {assets, plural, one {#개} other {#개}}를 가져왔습니다." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "데스크톱 업데이트 설치 중…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "인스턴트 메시징 및 VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "인스턴트 메신저" @@ -19903,6 +19920,13 @@ msgstr "외부 계정 및 도메인을 {PRODUCT_NAME} 프로필에 연결하세 msgid "Link external accounts and domains to your profile" msgstr "외부 계정 및 도메인을 프로필에 연결" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "파일 연결" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "프로필에 표시하려면 {BLUESKY_PROVIDER_NAME} 계정을 연결하 msgid "Linked" msgstr "연결됨" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "테마 파일 {length, plural, one {#개} other {#개}}를 연결했습니다. 파일에 저장한 변경 사항이 바로 적용됩니다." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "연결된 계정" msgid "Linked devices" msgstr "연결된 기기" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "연결된 파일을 사용할 수 없습니다" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "{path}에 연결됨." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "{path}에 연결됨. 모든 편집기에서 파일을 편집하고 저장하면 변경 사항이 즉시 적용됩니다." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "파일에 연결됨" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "알림 표시줄 재정의" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "텍스트 내용 없음" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "선택된 테마가 없습니다." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "검색과 일치하는 테마가 없습니다." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "저장된 테마가 아직 없습니다." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "역방향 이미지 검색 공급자 선택" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "왼쪽에서 테마를 선택하여 이름, 메타데이터, CSS를 편집하거나 새 테마를 가져오세요." @@ -27320,7 +27369,7 @@ msgstr "저장된 미디어에서 제거" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "항상 위에 표시 해제" @@ -28959,7 +29008,7 @@ msgstr "아이콘 저장" msgid "Save some media from messages to get started!" msgstr "메시지에서 미디어를 저장해 보세요!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "테마 저장" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "웹 검색" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "테마 검색…" @@ -32504,7 +32553,7 @@ msgstr "포커스 해제 시에도 계속 상호작용" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "항상 위에 표시" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "태그" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "태그" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "테마 색상" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "테마 CSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "테마를 찾을 수 없습니다" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "테마가 저장되었습니다." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "가장 최근 청구서가 환불되고 관련 구독이 취소됩니다. 30일 동안은 직접 환불할 수 없습니다." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "이 기기에서 \"{themeName}\" 테마를 삭제합니다." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "신뢰하는 도메인이 삭제되었습니다." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "다른 이름을 시도하거나 검색을 지우세요." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "연결 해제" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "읽지 않은 메시지 배지" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "읽지 않은 메시지" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "읽지 않은 메시지: {count}개" @@ -36807,7 +36861,7 @@ msgstr "읽지 않은 메시지: {count}개" msgid "Unreads" msgstr "안 읽음" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "저장되지 않은 변경사항" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "버몬트" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "버전" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "지금은 메시지를 전달할 수 없습니다." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "테마 라이브러리 파일을 가져올 수 없습니다." diff --git a/fluxer_app/src/features/i18n/locales/lt/messages.po b/fluxer_app/src/features/i18n/locales/lt/messages.po index e9ceb0017..54f779dba 100644 --- a/fluxer_app/src/features/i18n/locales/lt/messages.po +++ b/fluxer_app/src/features/i18n/locales/lt/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# programa pasirinkta prieigai atšaukti} few {# programos pasirinktos prieigai atšaukti} other {# programų pasirinkta prieigai atšaukti}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} negali prisijungti prie savo serverių. Jis ir toliau bandys veikti fone." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "Nepavyko paleisti {appName}" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# tekstinis kanalas} few {# tekstiniai kanalai} many {# tekstinio kanalo} other {# tekstinių kanalų}}, {voiceChannelCount, plural, one {# balso kanalas} few {# balso kanalai} many {# balso kanalo} other {# balso kanalų}}, {categoryCount, plural, one {# kategorija} few {# kategorijos} many {# kategorijos} other {# kategorijų}}, {roleCount, plural, one {# vaidmuo} few {# vaidmenys} many {# vaidmens} other {# vaidmenų}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} kopija" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Autentifikatoriaus kodas" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Autorius" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Negalite pasiekti to el. pašto?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Nepavyksta prisijungti" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Nepavyksta rasti {path}. Naudojama paskutinė įkelta versija." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Čia negalima įklijuoti paveikslėlio" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Nepavyksta nuskaityti {path}. Naudojama paskutinė įkelta versija." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Netrukus" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "atskirti kableliais" @@ -10817,6 +10827,11 @@ msgstr "Apkarpyti {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS failai" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaveras" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Ištrinti kategoriją „{categoryName}“? Šio veiksmo anuliuoti negalima." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Ištrinti temą" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Ištrinti temą?" @@ -13231,7 +13246,7 @@ msgstr "Dėl brandaus turinio įstatymų, galiojančių regione „{regionName} msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Dėl brandaus turinio įstatymų, galiojančių regione „{regionName}“, ši medija nepasiekiama jūsų dabartiniame regione." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Dubliuoti" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Įjungti {permissionName} leidimą" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Įjungti „{themeName}“" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Naršyti bendruomenes" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Eksportuoti" @@ -14885,7 +14900,7 @@ msgstr "Eksportuoti visas kada nors išsiųstas žinutes, taip pat visus paskyro msgid "Export GIF URLs" msgstr "Eksportuoti GIF URL adresus" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Eksportuoti biblioteką" @@ -18073,7 +18088,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importuoti „{theOtherPlatform}“ šabloną" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Norėdami pradėti, importuokite .css failą arba įklijuokite savo CSS skiltyje „Greitasis CSS“." @@ -18087,7 +18102,9 @@ msgstr "Importavimas baigtas. Pridėta {importedCount, plural, one {# GIF} other msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Importavimas baigtas. Pridėta {importedCount, plural, one {# GIF} other {# GIF}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importuoti CSS" @@ -18099,7 +18116,7 @@ msgstr "Importuoti mėgstamiausius GIF" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importuoti aplanką" @@ -18108,7 +18125,7 @@ msgstr "Importuoti aplanką" msgid "Import GIFs" msgstr "Importuoti GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importuoti biblioteką" @@ -18151,13 +18168,13 @@ msgstr "Svarbi informacija:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "{length, plural, one {Importuotas # temos failas} few {Importuoti # temos failai} other {Importuota # temos failų}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Importuota {themes, plural, one {# tema} few {# temos} other {# temų}} ir {assets, plural, one {# elementas} few {# elementai} other {# elementų}}." @@ -18565,12 +18582,12 @@ msgid "Installing desktop update…" msgstr "Diegiamas darbalaukio naujinimas…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Momentiniai pranešimai ir VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Momentinių pranešimų programa" @@ -19904,6 +19921,13 @@ msgstr "Susiekite išorines paskyras ir domenus su savo „{PRODUCT_NAME}“ pro msgid "Link external accounts and domains to your profile" msgstr "Susiekite išorines paskyras ir domenus su savo profiliu" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Susieti failą" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19966,6 +19990,11 @@ msgstr "Susiekite savo „{BLUESKY_PROVIDER_NAME}“ paskyrą arba patvirtinkite msgid "Linked" msgstr "Susietas" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Susieti {length, plural, one {# temos failas} other {# temos failai}}. Jums juos pakeitus, pakeitimai bus pritaikyti iš karto." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19978,6 +20007,26 @@ msgstr "Susietos paskyros" msgid "Linked devices" msgstr "Susieti įrenginiai" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Nuoroda į failą negalima" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Susietas su {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Susietas su {path}. Redaguokite failą bet kuriuo redaktoriumi ir išsaugotus pakeitimus čia pritaikysite iš karto." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Susietas su failu" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22402,7 +22451,7 @@ msgstr "Nagbaro perrašymai" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23344,17 +23393,17 @@ msgid "no text content" msgstr "nėra teksto turinio" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Nepasirinkta jokia tema." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Nėra temų, atitinkančių jūsų paiešką." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Kol kas neišsaugota jokių temų." @@ -25329,7 +25378,7 @@ msgid "Pick a reverse image search provider" msgstr "Pasirinkite atvirkštinės vaizdų paieškos teikėją" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Kairėje pasirinkite temą, kad redaguotumėte jos pavadinimą, metaduomenis ir CSS. Arba importuokite naują." @@ -27321,7 +27370,7 @@ msgstr "Pašalinti iš išsaugotos medijos" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Nerodyti viršuje" @@ -28960,7 +29009,7 @@ msgstr "Išsaugoti piktogramą" msgid "Save some media from messages to get started!" msgstr "Norėdami pradėti, išsaugokite kelis medijos failus iš žinučių!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Išsaugoti temą" @@ -29538,7 +29587,7 @@ msgid "Search the web" msgstr "Ieškoti internete" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Ieškoti temų…" @@ -32505,7 +32554,7 @@ msgstr "Likti visiškai interaktyviam, kai langas neaktyvus" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Visada rodyti viršuje" @@ -33464,7 +33513,7 @@ msgid "Tag" msgstr "Žyma" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Žymos" @@ -34141,7 +34190,7 @@ msgid "Theme color" msgstr "Temos spalva" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "Temos CSS" @@ -34161,7 +34210,7 @@ msgid "Theme not found" msgstr "Tema nerasta" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Tema išsaugota." @@ -34893,7 +34942,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Tai grąžins pinigus už naujausią sąskaitą faktūrą ir atšauks susijusią prenumeratą. 30 dienų negalėsite dar kartą patys susigrąžinti pinigų." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Tai pašalins „{themeName}“ iš šio įrenginio." @@ -35639,7 +35688,7 @@ msgid "Trusted domains cleared." msgstr "Patikimi domenai išvalyti." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Pabandykite kitą pavadinimą arba išvalykite paiešką." @@ -36497,6 +36546,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Atjungti" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36794,12 +36848,12 @@ msgid "Unread message badge" msgstr "Neskaitytų žinučių ženklelis" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Neperskaitytos žinutės" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Neperskaitytos žinutės: {count}" @@ -36808,7 +36862,7 @@ msgstr "Neperskaitytos žinutės: {count}" msgid "Unreads" msgstr "Neskaityti" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Neišsaugoti pakeitimai" @@ -38124,7 +38178,7 @@ msgid "Vermont" msgstr "Vermontas" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Versija" @@ -39035,7 +39089,7 @@ msgid "We couldn't forward the message at this time." msgstr "Šiuo metu nepavyko persiųsti žinutės." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Nepavyko importuoti šio temos bibliotekos failo." diff --git a/fluxer_app/src/features/i18n/locales/nl/messages.po b/fluxer_app/src/features/i18n/locales/nl/messages.po index 446b8e86c..25d0e956f 100644 --- a/fluxer_app/src/features/i18n/locales/nl/messages.po +++ b/fluxer_app/src/features/i18n/locales/nl/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# app geselecteerd om de toegang in te trekken} other {# apps geselecteerd om de toegang in te trekken}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} kan zijn servers niet bereiken. Het blijft op de achtergrond proberen." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} kon niet worden gestart" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# tekstkanaal} other {# tekstkanalen}}, {voiceChannelCount, plural, one {# spraakkanaal} other {# spraakkanalen}}, {categoryCount, plural, one {# categorie} other {# categorieën}}, {roleCount, plural, one {# rol} other {# rollen}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} kopie" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Code uit authenticator-app" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Auteur" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Geen toegang tot dat e-mailadres?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Kan geen verbinding maken" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Kan {path} niet vinden. De laatst geladen versie wordt gebruikt." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Kan hier geen afbeelding plakken" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Kan {path} niet lezen. De laatst geladen versie wordt gebruikt." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Binnenkort beschikbaar" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "komma, gescheiden" @@ -10817,6 +10827,11 @@ msgstr "Bijsnijden {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS-bestanden" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Categorie \"{categoryName}\" verwijderen? Dit kan niet ongedaan worden gemaakt." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Thema verwijderen" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Thema verwijderen?" @@ -13231,7 +13246,7 @@ msgstr "Vanwege wetgeving voor inhoud voor volwassenen in {regionName} is deze i msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Vanwege wetgeving over inhoud voor volwassenen in {regionName} is dit media-item niet beschikbaar in je huidige regio." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Dupliceren" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Machtiging {permissionName} inschakelen" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "{themeName} inschakelen" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Ontdek communities" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Exporteren" @@ -14885,7 +14900,7 @@ msgstr "Exporteer elk bericht dat je ooit hebt verzonden, plus al je accountinst msgid "Export GIF URLs" msgstr "GIF-URL's exporteren" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Bibliotheek exporteren" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importeer sjabloon van {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Importeer een .css-bestand om te beginnen, of plak je eigen CSS in Snelle CSS." @@ -18086,7 +18101,9 @@ msgstr "Importeren voltooid. {importedCount, plural, one {# GIF} other {# GIF's} msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Importeren voltooid. {importedCount, plural, one {# GIF toegevoegd} other {# GIF's toegevoegd}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "CSS importeren" @@ -18098,7 +18115,7 @@ msgstr "Favoriete GIF's importeren" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Map importeren" @@ -18107,7 +18124,7 @@ msgstr "Map importeren" msgid "Import GIFs" msgstr "GIF's importeren" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Bibliotheek importeren" @@ -18150,13 +18167,13 @@ msgstr "Belangrijke informatie:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Geïmporteerd: {length, plural, one {# themabestand} other {# themabestanden}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Er zijn {themes, plural, one {# thema} other {# thema's}} en {assets, plural, one {# bestand} other {# bestanden}} geïmporteerd." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Desktopupdate installeren…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Instant messaging en VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Chatprogramma" @@ -19903,6 +19920,13 @@ msgstr "Koppel externe accounts en domeinen aan je {PRODUCT_NAME}-profiel. Gever msgid "Link external accounts and domains to your profile" msgstr "Koppel externe accounts en domeinen aan je profiel" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Koppel bestand" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Koppel je {BLUESKY_PROVIDER_NAME}-account of verifieer het eigendom van msgid "Linked" msgstr "Gekoppeld" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Gekoppelde {length, plural, one {# thema-bestand} other {# thema-bestanden}}. Wijzigingen die je hierin opslaat, worden direct toegepast." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Gekoppelde accounts" msgid "Linked devices" msgstr "Gekoppelde apparaten" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Gekoppeld bestand niet beschikbaar" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Gekoppeld aan {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Gekoppeld aan {path}. Bewerk het bestand in een editor en opgeslagen wijzigingen worden hier direct toegepast." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Gekoppeld aan een bestand" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Meldingsbalken forceren" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "geen tekstinhoud" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Geen thema geselecteerd." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Geen thema's komen overeen met je zoekopdracht." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Nog geen thema's opgeslagen." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Kies een zoekmachine voor omgekeerd zoeken op afbeeldingen" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Kies links een thema om de naam, metadata en CSS te bewerken. Of importeer een nieuw thema." @@ -27320,7 +27369,7 @@ msgstr "Verwijderen uit opgeslagen media" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Niet meer altijd bovenaan" @@ -28959,7 +29008,7 @@ msgstr "Pictogram opslaan" msgid "Save some media from messages to get started!" msgstr "Sla media van berichten op om te beginnen!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Thema opslaan" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Zoek op internet" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Zoek thema's…" @@ -32504,7 +32553,7 @@ msgstr "Volledig interactief blijven wanneer niet geselecteerd" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Altijd bovenaan" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tag" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tags" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Themakleur" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "Thema-CSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Thema niet gevonden" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Thema opgeslagen." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Hiermee wordt je meest recente factuur terugbetaald en een eventueel bijbehorend abonnement beëindigd. Je kunt de komende 30 dagen niet opnieuw zelf een terugbetaling aanvragen." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Hiermee wordt \"{themeName}\" van dit apparaat verwijderd." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Vertrouwde domeinen gewist." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Probeer een andere naam of wis de zoekopdracht." @@ -36496,6 +36545,11 @@ msgstr "onbekende-vermelding" msgid "unknown-role" msgstr "onbekende-rol" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Ontkoppelen" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Badge voor ongelezen berichten" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Ongelezen berichten" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Ongelezen berichten: {count}" @@ -36807,7 +36861,7 @@ msgstr "Ongelezen berichten: {count}" msgid "Unreads" msgstr "Ongelezen" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Niet-opgeslagen wijzigingen" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Versie" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "We konden het bericht nu niet doorsturen." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "We konden dat themabibliotheekbestand niet importeren." diff --git a/fluxer_app/src/features/i18n/locales/no/messages.po b/fluxer_app/src/features/i18n/locales/no/messages.po index 0b16beebe..141d73d5e 100644 --- a/fluxer_app/src/features/i18n/locales/no/messages.po +++ b/fluxer_app/src/features/i18n/locales/no/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# app valgt for tilbaketrekking av tilgang} other {# apper valgt for tilbaketrekking av tilgang}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} klarer ikke å nå serverne sine. Den vil fortsette å prøve i bakgrunnen." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} kunne ikke starte" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# tekstkanal} other {# tekstkanaler}}, {voiceChannelCount, plural, one {# talekanal} other {# talekanaler}}, {categoryCount, plural, one {# kategori} other {# kategorier}}, {roleCount, plural, one {# rolle} other {# roller}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Kopi av {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Kode fra autentiseringsappen" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Forfatter" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Får du ikke tilgang til den e-postadressen?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Kan ikke koble til" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Finner ikke {path}. Bruker sist innlastede versjon." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Kan ikke lime inn bilde her" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Kan ikke lese {path}. Bruker den sist innlastede versjonen." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Kommer snart" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "komma, separert" @@ -10817,6 +10827,11 @@ msgstr "Beskjærer {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS-filer" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Slette kategorien «{categoryName}»? Kan ikke angres." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Slett tema" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Slette tema?" @@ -13231,7 +13246,7 @@ msgstr "På grunn av lover om vokseninnhold i {regionName} er dette innholdet ik msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "På grunn av lover om vokseninnhold i {regionName} er dette mediet ikke tilgjengelig fra din nåværende region." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Dupliser" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Aktiver tillatelsen {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Aktiver {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Utforsk fellesskap" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Eksporter" @@ -14885,7 +14900,7 @@ msgstr "Eksporter alle meldinger du har sendt, pluss alle kontoinnstillingene di msgid "Export GIF URLs" msgstr "Eksporter GIF-URL-er" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Eksporter bibliotek" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importer mal fra {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Importer en .css-fil for å komme i gang, eller lim inn din egen CSS i hurtig-CSS." @@ -18086,7 +18101,9 @@ msgstr "Importen er fullført. La til {importedCount, plural, one {# GIF} other msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Import fullført. La til {importedCount, plural, one {# GIF} other {# GIF-er}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importer CSS" @@ -18098,7 +18115,7 @@ msgstr "Importer favoritt-GIF-er" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importer mappe" @@ -18107,7 +18124,7 @@ msgstr "Importer mappe" msgid "Import GIFs" msgstr "Importer GIF-er" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importer bibliotek" @@ -18150,13 +18167,13 @@ msgstr "Viktig informasjon:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Importerte {length, plural, one {# temafil} other {# temafiler}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Importerte {themes, plural, one {# tema} other {# temaer}} og {assets, plural, one {# ressurs} other {# ressurser}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Installerer oppdatering til skrivebordsappen …" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Lynmeldinger og VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Chatteprogram" @@ -19903,6 +19920,13 @@ msgstr "Koble eksterne kontoer og domener til {PRODUCT_NAME}-profilen din. Bekre msgid "Link external accounts and domains to your profile" msgstr "Koble eksterne kontoer og domener til profilen din" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Koble til fil" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Koble til {BLUESKY_PROVIDER_NAME}-kontoen din eller bekreft domeneeiersk msgid "Linked" msgstr "Tilknyttet" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Koblede {length, plural, one {# temafil} other {# temafiler}}. Endringer du lagrer i dem, gjelder umiddelbart." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Tilkoblede kontoer" msgid "Linked devices" msgstr "Tilkoblede enheter" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Filen er utilgjengelig" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Koblet til {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Koblet til {path}. Rediger filen i en hvilken som helst editor, og lagrede endringer gjelder her med en gang." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Koblet til en fil" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Overstyringer for varselbannere" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "ingen tekst" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Ikke noe tema valgt." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Ingen temaer samsvarer med søket ditt." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Ingen temaer er lagret ennå." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Velg en leverandør for omvendt bildesøk" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Velg et tema til venstre for å redigere navn, metadata og CSS. Eller importer et nytt." @@ -27320,7 +27369,7 @@ msgstr "Fjern fra lagrede medier" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Slutt å vise øverst" @@ -28959,7 +29008,7 @@ msgstr "Lagre ikon" msgid "Save some media from messages to get started!" msgstr "Lagre noe medieinnhold fra meldinger for å komme i gang!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Lagre tema" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Søk på nettet" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Søk etter temaer …" @@ -32504,7 +32553,7 @@ msgstr "Forbli fullt interaktiv når appen ikke er i fokus" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Hold vinduet øverst" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tagg" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tagger" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Temafarge" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "Tema-CSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Tema ikke funnet" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Tema lagret." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Dette refunderer den siste fakturaen din og sier opp eventuelle tilknyttede abonnementer. Du kan ikke bruke selvbetjent refusjon igjen før om 30 dager." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Dette fjerner «{themeName}» fra denne enheten." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Listen over klarerte domener er tømt." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Prøv et annet navn eller tøm søket." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Fjern kobling" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Merke for uleste meldinger" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Uleste meldinger" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Uleste meldinger: {count}" @@ -36807,7 +36861,7 @@ msgstr "Uleste meldinger: {count}" msgid "Unreads" msgstr "Uleste" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Ulagrede endringer" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Versjon" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Vi kunne ikke videresende meldingen nå." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Vi kunne ikke importere temabibliotekfilen." diff --git a/fluxer_app/src/features/i18n/locales/pl/messages.po b/fluxer_app/src/features/i18n/locales/pl/messages.po index aceca30df..43df150b0 100644 --- a/fluxer_app/src/features/i18n/locales/pl/messages.po +++ b/fluxer_app/src/features/i18n/locales/pl/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {Wybrano # aplikację do cofnięcia dostępu} few {Wybrano # aplikacje do cofnięcia dostępu} many {Wybrano # aplikacji do cofnięcia dostępu} other {Wybrano # aplikacji do cofnięcia dostępu}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} nie może połączyć się z serwerami. Będzie próbować dalej w tle." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "Nie udało się uruchomić {appName}" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# kanał tekstowy} few {# kanały tekstowe} many {# kanałów tekstowych} other {# kanału tekstowego}}, {voiceChannelCount, plural, one {# kanał głosowy} few {# kanały głosowe} many {# kanałów głosowych} other {# kanału głosowego}}, {categoryCount, plural, one {# kategoria} few {# kategorie} many {# kategorii} other {# kategorii}}, {roleCount, plural, one {# rola} few {# role} many {# ról} other {# roli}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Kopia {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Kod z aplikacji uwierzytelniającej" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Autor" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Nie masz dostępu do tego adresu e-mail?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Nie można połączyć" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Nie można znaleźć {path}. Użyto ostatniej załadowanej wersji." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Nie można tu wkleić obrazu" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Nie można odczytać pliku {path}. Używana jest ostatnia załadowana wersja." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Wkrótce" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "rozdzielone przecinkami" @@ -10817,6 +10827,11 @@ msgstr "Przycinanie {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "Pliki CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Usunąć kategorię \"{categoryName}\"? Tej operacji nie można cofnąć." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Usuń motyw" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Usunąć motyw?" @@ -13231,7 +13246,7 @@ msgstr "Ze względu na przepisy dotyczące treści dla dorosłych w regionie {re msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Ze względu na przepisy dotyczące treści dla dorosłych w regionie {regionName} te multimedia nie są dostępne w Twoim obecnym regionie." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplikuj" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Włącz uprawnienie {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Włącz {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Odkrywaj społeczności" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Eksportuj" @@ -14885,7 +14900,7 @@ msgstr "Wyeksportuj każdą wysłaną wiadomość, a także wszystkie ustawienia msgid "Export GIF URLs" msgstr "Eksportuj adresy URL GIF-ów" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Eksportuj bibliotekę" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Zaimportuj szablon z {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Zaimportuj plik .css, aby rozpocząć, lub wklej własny kod CSS w Szybkim CSS." @@ -18086,7 +18101,9 @@ msgstr "Importowanie zakończone. Dodano {importedCount, plural, one {# GIF} few msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Importowanie zakończone. Dodano {importedCount, plural, one {# GIF} few {# GIF-y} many {# GIF-ów} other {# GIF-ów}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importuj CSS" @@ -18098,7 +18115,7 @@ msgstr "Importuj ulubione GIF-y" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importuj folder" @@ -18107,7 +18124,7 @@ msgstr "Importuj folder" msgid "Import GIFs" msgstr "Importuj GIF-y" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importuj bibliotekę" @@ -18150,13 +18167,13 @@ msgstr "Ważne informacje:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Zaimportowano {length, plural, one {# plik motywu} few {# pliki motywu} many {# plików motywu} other {# plików motywu}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Zaimportowano {themes, plural, one {# motyw} few {# motywy} many {# motywów} other {# motywów}} i {assets, plural, one {# zasób} few {# zasoby} many {# zasobów} other {# zasobów}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Instalowanie aktualizacji aplikacji komputerowej…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Wiadomości błyskawiczne i VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Komunikator internetowy" @@ -19903,6 +19920,13 @@ msgstr "Połącz zewnętrzne konta i domeny ze swoim profilem w {PRODUCT_NAME}. msgid "Link external accounts and domains to your profile" msgstr "Połącz zewnętrzne konta i domeny ze swoim profilem" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Połącz plik" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Połącz swoje konto {BLUESKY_PROVIDER_NAME} lub zweryfikuj własność msgid "Linked" msgstr "Połączone" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Połączone {length, plural, one {# plik motywu} other {# plików motywów}}. Zmiany, które w nich zapiszesz, zostaną zastosowane od razu." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Połączone konta" msgid "Linked devices" msgstr "Połączone urządzenia" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Połączony plik niedostępny" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Połączono z {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Połączono z {path}. Edytuj plik w dowolnym edytorze, a zapisane zmiany zostaną od razu zastosowane tutaj." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Połączono z plikiem" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Wymuszenia pasków powiadomień" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "brak treści tekstowej" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Nie wybrano motywu." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Brak motywów pasujących do wyszukiwania." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Nie zapisano jeszcze żadnych motywów." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Wybierz dostawcę wyszukiwania obrazem" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Wybierz motyw po lewej, aby edytować jego nazwę, metadane i CSS. Możesz też zaimportować nowy." @@ -27320,7 +27369,7 @@ msgstr "Usuń z zapisanych multimediów" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Usuń z góry" @@ -28959,7 +29008,7 @@ msgstr "Zapisz ikonę" msgid "Save some media from messages to get started!" msgstr "Zapisz multimedia z wiadomości, aby zacząć!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Zapisz motyw" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Szukaj w internecie" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Szukaj motywów…" @@ -32504,7 +32553,7 @@ msgstr "Pozostań w pełni interaktywny, gdy aplikacja jest nieaktywna" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Zawsze na wierzchu" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tag" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tagi" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Kolor motywu" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS motywu" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Nie znaleziono motywu" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Motyw zapisany." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Spowoduje to zwrot środków za ostatnią fakturę i anulowanie powiązanej subskrypcji. Przez 30 dni nie będzie można ponownie samodzielnie uzyskać zwrotu." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Spowoduje to usunięcie motywu „{themeName}” z tego urządzenia." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Wyczyszczono zaufane domeny." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Spróbuj innej nazwy lub wyczyść wyszukiwanie." @@ -36496,6 +36545,11 @@ msgstr "nieznana-wzmianka" msgid "unknown-role" msgstr "nieznana-rola" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Odłącz" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Znacznik nieprzeczytanych wiadomości" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Nieprzeczytane wiadomości" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Nieprzeczytane wiadomości: {count}" @@ -36807,7 +36861,7 @@ msgstr "Nieprzeczytane wiadomości: {count}" msgid "Unreads" msgstr "Nieprzeczytane" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Niezapisane zmiany" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Wersja" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Nie udało się teraz przekazać wiadomości dalej." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Nie udało się zaimportować pliku biblioteki motywów." diff --git a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po index 3257fa1a6..526b8f74a 100644 --- a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po +++ b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, =1 {# aplicativo selecionado para revogar o acesso} other {# aplicativos selecionados para revogar o acesso}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "O {appName} não consegue acessar os servidores. Ele continuará tentando em segundo plano." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "Falha ao iniciar o {appName}" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, =0 {# canais de texto} one {# canal de texto} many {# canais de texto} other {# canais de texto}}, {voiceChannelCount, plural, =0 {# canais de voz} one {# canal de voz} many {# canais de voz} other {# canais de voz}}, {categoryCount, plural, =0 {# categorias} one {# categoria} many {# categorias} other {# categorias}}, {roleCount, plural, =0 {# cargos} one {# cargo} many {# cargos} other {# cargos}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Cópia de {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Código do autenticador" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Autor" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Não consegue acessar esse e-mail?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Não foi possível conectar" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Não foi possível encontrar {path}. Usando a última versão carregada." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Não é possível colar a imagem aqui" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Não foi possível ler {path}. Usando a última versão carregada." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Em breve" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "separado, por vírgulas" @@ -10817,6 +10827,11 @@ msgstr "Cortando {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "Arquivos CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Excluir a categoria \"{categoryName}\"? Não é possível desfazer." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Excluir tema" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Excluir tema?" @@ -13231,7 +13246,7 @@ msgstr "Devido às leis de conteúdo adulto em {regionName}, este conteúdo não msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Devido às leis de conteúdo adulto em {regionName}, esta mídia não está disponível na sua região atual." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplicar" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Ativar a permissão {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Ativar {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Explorar comunidades" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Exportar" @@ -14885,7 +14900,7 @@ msgstr "Exporte todas as mensagens que você já enviou, além de todas as confi msgid "Export GIF URLs" msgstr "Exportar URLs de GIFs" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Exportar biblioteca" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importar modelo {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Importe um arquivo .css para começar ou cole seu próprio CSS em CSS rápido." @@ -18086,7 +18101,9 @@ msgstr "Importação concluída. {importedCount, plural, =1 {# GIF adicionado} o msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Importação concluída. {importedCount, plural, =1 {# GIF adicionado.} other {# GIFs adicionados.}}" -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importar CSS" @@ -18098,7 +18115,7 @@ msgstr "Importar GIFs favoritos" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importar pasta" @@ -18107,7 +18124,7 @@ msgstr "Importar pasta" msgid "Import GIFs" msgstr "Importar GIFs" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importar biblioteca" @@ -18150,13 +18167,13 @@ msgstr "Informações importantes:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "{length, plural, =1 {# arquivo de tema importado.} other {# arquivos de tema importados.}}" #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Importação concluída: {themes, plural, =1 {# tema} other {# temas}} e {assets, plural, =1 {# recurso} other {# recursos}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Instalando atualização do aplicativo…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Mensagens instantâneas e VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Mensageiro instantâneo" @@ -19903,6 +19920,13 @@ msgstr "Conecte contas e domínios externos ao seu perfil do {PRODUCT_NAME}. As msgid "Link external accounts and domains to your profile" msgstr "Vincule contas e domínios externos ao seu perfil" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Vincular arquivo" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Vincule sua conta {BLUESKY_PROVIDER_NAME} ou verifique a propriedade do msgid "Linked" msgstr "Vinculado" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Temas vinculados {length, plural, one {# arquivo de tema} other {# arquivos de tema}}. As alterações que você salvar neles são aplicadas imediatamente." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Contas vinculadas" msgid "Linked devices" msgstr "Dispositivos vinculados" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Arquivo vinculado indisponível" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Vinculado a {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Vinculado a {path}. Edite o arquivo em qualquer editor e as alterações salvas se aplicam aqui imediatamente." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Vinculado a um arquivo" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Substituições da barra de notificação" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "sem conteúdo de texto" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Nenhum tema selecionado." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Nenhum tema corresponde à sua pesquisa." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Nenhum tema salvo ainda." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Escolha um provedor de busca de imagem reversa" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Escolha um tema à esquerda para editar o nome, metadados e CSS. Ou importe um novo." @@ -27320,7 +27369,7 @@ msgstr "Remover das mídias salvas" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Desativar sempre no topo" @@ -28959,7 +29008,7 @@ msgstr "Salvar ícone" msgid "Save some media from messages to get started!" msgstr "Salve algumas mídias de mensagens para começar!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Salvar tema" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Pesquisar na web" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Pesquisar temas…" @@ -32504,7 +32553,7 @@ msgstr "Manter a interação completa quando a janela estiver sem foco" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Manter na frente" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tag" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Tags" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Cor do tema" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS do tema" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Tema não encontrado" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Tema salvo." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Isso reembolsa sua fatura mais recente e cancela qualquer assinatura associada. Você não poderá solicitar outro reembolso pelo aplicativo por 30 dias." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Isso removerá \"{themeName}\" deste dispositivo." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Domínios confiáveis apagados." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Tente outro nome ou limpe a busca." @@ -36496,6 +36545,11 @@ msgstr "menção-desconhecida" msgid "unknown-role" msgstr "cargo-desconhecido" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Desvincular" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Notificação de mensagens não lidas" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Mensagens não lidas" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Mensagens não lidas: {count}" @@ -36807,7 +36861,7 @@ msgstr "Mensagens não lidas: {count}" msgid "Unreads" msgstr "Não lidas" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Alterações não salvas" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Versão" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Não conseguimos encaminhar a mensagem agora." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Não foi possível importar o arquivo da biblioteca de temas." diff --git a/fluxer_app/src/features/i18n/locales/ro/messages.po b/fluxer_app/src/features/i18n/locales/ro/messages.po index 280c9b42b..015978fb4 100644 --- a/fluxer_app/src/features/i18n/locales/ro/messages.po +++ b/fluxer_app/src/features/i18n/locales/ro/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# aplicație selectată pentru revocarea accesului} few {# aplicații selectate pentru revocarea accesului} other {# de aplicații selectate pentru revocarea accesului}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} nu poate accesa serverele. Va continua să încerce în fundal." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} nu a putut porni" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# canal text} few {# canale text} other {# de canale text}}, {voiceChannelCount, plural, one {# canal vocal} few {# canale vocale} other {# de canale vocale}}, {categoryCount, plural, one {# categorie} few {# categorii} other {# de categorii}}, {roleCount, plural, one {# rol} few {# roluri} other {# de roluri}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Copie după {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Cod de autentificare" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Autor" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Nu poți accesa acel e-mail?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Nu se poate conecta" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Nu am găsit {path}. Se folosește ultima versiune încărcată." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Nu se poate lipi imaginea aici" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Nu se poate citi {path}. Se folosește ultima versiune încărcată." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "În curând" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "separate, prin, virgulă" @@ -10817,6 +10827,11 @@ msgstr "Se decupează {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "Fișiere CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Ștergi categoria „{categoryName}”? Acțiunea nu poate fi anulată." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Șterge tema" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Ștergi tema?" @@ -13231,7 +13246,7 @@ msgstr "Din cauza legilor privind conținutul matur din {regionName}, acest con msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Din cauza legilor privind conținutul matur din {regionName}, acest fișier media nu este disponibil în regiunea ta actuală." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplicare" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Activează permisiunea {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Activează {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Explorează comunități" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Export" @@ -14885,7 +14900,7 @@ msgstr "Exportă fiecare mesaj pe care l-ai trimis vreodată, plus toate setări msgid "Export GIF URLs" msgstr "Exportă URL-uri GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Exportă biblioteca" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importă șablon {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Importă un fișier .css pentru a începe sau lipește propriul CSS în CSS rapid." @@ -18086,7 +18101,9 @@ msgstr "Import finalizat. S-au adăugat {importedCount, plural, one {# GIF} few msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Import finalizat. S-au adăugat {importedCount, plural, one {# GIF} few {# GIF-uri} other {# de GIF-uri}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importă CSS" @@ -18098,7 +18115,7 @@ msgstr "Importă GIF-uri favorite" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importă dosar" @@ -18107,7 +18124,7 @@ msgstr "Importă dosar" msgid "Import GIFs" msgstr "Importă GIF-uri" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importă bibliotecă" @@ -18150,13 +18167,13 @@ msgstr "Informații importante:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "S-au importat {length, plural, one {# fișier de temă} few {# fișiere de temă} other {# de fișiere de temă}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "S-au importat {themes, plural, one {# temă} few {# teme} other {# de teme}} și {assets, plural, one {# element} few {# elemente} other {# de elemente}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Se instalează actualizarea pentru desktop…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Mesagerie instantanee și VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Mesagerie instantanee" @@ -19903,6 +19920,13 @@ msgstr "Conectează conturi și domenii externe la profilul tău {PRODUCT_NAME}. msgid "Link external accounts and domains to your profile" msgstr "Conectează conturi și domenii externe la profilul tău" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Conectare fișier" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Conectează-ți contul {BLUESKY_PROVIDER_NAME} sau verifică proprietate msgid "Linked" msgstr "Conectat" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Fișiere temă legate {length, plural, one {#} other {#}}. Modificările pe care le salvezi se aplică imediat." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Conturi conectate" msgid "Linked devices" msgstr "Dispozitive conectate" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Fișierul asociat nu este disponibil" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Conectat la {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Legat la {path}. Editează fișierul în orice editor, iar modificările salvate se aplică aici imediat." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Legat de un fișier" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Suprascrieri Nagbar" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "fără conținut text" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Nicio temă selectată." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Nicio temă nu corespunde căutării tale." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Încă nicio temă salvată." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Alege un furnizor de căutare inversă a imaginii" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Alege o temă din stânga pentru a-i edita numele, metadatele și CSS-ul. Sau importă una nouă." @@ -27320,7 +27369,7 @@ msgstr "Elimină din media salvată" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Scoate fereastra din prim-plan" @@ -28959,7 +29008,7 @@ msgstr "Salvează pictograma" msgid "Save some media from messages to get started!" msgstr "Salvează niște fișiere media din mesaje pentru a începe!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Salvează tema" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Caută pe web" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Caută teme…" @@ -32504,7 +32553,7 @@ msgstr "Rămâne complet interactiv când fereastra nu este focalizată" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Menține fereastra în prim-plan" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tag" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Etichete" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Culoare temă" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS temă" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Temă negăsită" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Temă salvată." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Aceasta rambursează cea mai recentă factură și anulează orice abonament asociat. Nu vei mai putea să-ți rambursezi singur banii timp de 30 de zile." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Aceasta elimină „{themeName}” de pe acest dispozitiv." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Domeniile de încredere au fost șterse." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Încearcă un alt nume sau șterge căutarea." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Dezlegare" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Insignă pentru mesaje necitite" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Mesaje necitite" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Mesaje necitite: {count}" @@ -36807,7 +36861,7 @@ msgstr "Mesaje necitite: {count}" msgid "Unreads" msgstr "Necitite" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Modificări nesalvate" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Versiune" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Nu am putut trimite mesajul mai departe acum." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Nu am putut importa fișierul bibliotecii de teme." diff --git a/fluxer_app/src/features/i18n/locales/ru/messages.po b/fluxer_app/src/features/i18n/locales/ru/messages.po index 5a430e219..9a406d0a1 100644 --- a/fluxer_app/src/features/i18n/locales/ru/messages.po +++ b/fluxer_app/src/features/i18n/locales/ru/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {Выбрано # приложение для отзыва доступа} few {Выбрано # приложения для отзыва доступа} many {Выбрано # приложений для отзыва доступа} other {Выбрано # приложения для отзыва доступа}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} не может подключиться к серверам. Попытки будут продолжаться в фоновом режиме." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "Не удалось запустить {appName}" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# текстовый канал} few {# текстовых канала} many {# текстовых каналов} other {# текстового канала}}, {voiceChannelCount, plural, one {# голосовой канал} few {# голосовых канала} many {# голосовых каналов} other {# голосового канала}}, {categoryCount, plural, one {# категория} few {# категории} many {# категорий} other {# категории}}, {roleCount, plural, one {# роль} few {# роли} many {# ролей} other {# роли}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} (копия)" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Код аутентификатора" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Автор" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Нет доступа к этой почте?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Не удается подключиться" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Не удалось найти {path}. Используется последняя загруженная версия." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Сюда нельзя вставить изображение" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Не удалось прочитать {path}. Используется последняя загруженная версия." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Скоро" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "через, запятую" @@ -10817,6 +10827,11 @@ msgstr "Обрезаем {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "Файлы CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Делавэр" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Удалить категорию «{categoryName}»? Это действие нельзя отменить." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Удалить тему" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Удалить тему?" @@ -13231,7 +13246,7 @@ msgstr "Из-за законов о контенте для взрослых в msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Из-за законов о контенте для взрослых в регионе {regionName} этот медиафайл недоступен в вашем текущем регионе." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Дублировать" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Включить разрешение «{permissionName}»" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Включить «{themeName}»" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Найти сообщества" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Экспорт" @@ -14885,7 +14900,7 @@ msgstr "Экспортировать все отправленные вами с msgid "Export GIF URLs" msgstr "Экспортировать URL GIF-файлов" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Экспорт библиотеки" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Импортировать шаблон {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Импортируйте файл .css, чтобы начать, или вставьте свой CSS в «Быстрый CSS»." @@ -18086,7 +18101,9 @@ msgstr "Импорт завершен. Добавлено {importedCount, plural msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Импорт завершен. Добавлено {importedCount, plural, one {# GIF} few {# GIF} many {# GIF} other {# GIF}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Импорт CSS" @@ -18098,7 +18115,7 @@ msgstr "Импортировать избранные GIF" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Импортировать папку" @@ -18107,7 +18124,7 @@ msgstr "Импортировать папку" msgid "Import GIFs" msgstr "Импорт GIF-файлов" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Импортировать библиотеку" @@ -18150,13 +18167,13 @@ msgstr "Важная информация:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Импортировано {length, plural, one {# файл темы} few {# файла темы} many {# файлов темы} other {# файлов темы}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Импортировано {themes, plural, one {# тема} few {# темы} many {# тем} other {# темы}} и {assets, plural, one {# ресурс} few {# ресурса} many {# ресурсов} other {# ресурсов}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Установка обновления для ПК…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Обмен мгновенными сообщениями и VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Мессенджер" @@ -19903,6 +19920,13 @@ msgstr "Привяжите внешние аккаунты и домены к с msgid "Link external accounts and domains to your profile" msgstr "Привяжите внешние аккаунты и домены к своему профилю" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Связать файл" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Привяжите аккаунт {BLUESKY_PROVIDER_NAME} или под msgid "Linked" msgstr "Связанные" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Связано {length, plural, one {# файл темы} other {# файлов темы}}. Изменения, которые вы сохраните, применятся сразу." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Связанные аккаунты" msgid "Linked devices" msgstr "Связанные устройства" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Файл не найден" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Привязано к {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Связано с {path}. Редактируйте файл в любом редакторе, и сохраненные изменения сразу же применятся здесь." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Привязано к файлу" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Переопределения Nagbar" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "нет текстового содержимого" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Тема не выбрана." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Темы по вашему запросу не найдены." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Темы пока не сохранены." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Выберите сервис для обратного поиска по изображению" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Выберите тему слева, чтобы изменить ее название, метаданные и CSS. Или импортируйте новую." @@ -27320,7 +27369,7 @@ msgstr "Удалить из сохраненных медиа" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Убрать закрепление сверху" @@ -28959,7 +29008,7 @@ msgstr "Сохранить значок" msgid "Save some media from messages to get started!" msgstr "Сохраните медиа из сообщений, чтобы начать!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Сохранить тему" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Искать в интернете" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Поиск тем…" @@ -32504,7 +32553,7 @@ msgstr "Оставаться полностью интерактивным, ко #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Поверх всех окон" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Тег" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Теги" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Цвет темы" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS темы" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Тема не найдена" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Тема сохранена." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Это вернет средства по последнему счету и отменит связанную с ним подписку. Вы не сможете самостоятельно вернуть средства в течение 30 дней." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Это удалит тему «{themeName}» с этого устройства." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Доверенные домены очищены." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Попробуйте другое имя или очистите поиск." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Отвязать" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Значок непрочитанных сообщений" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Непрочитанные сообщения" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Непрочитанные сообщения: {count}" @@ -36807,7 +36861,7 @@ msgstr "Непрочитанные сообщения: {count}" msgid "Unreads" msgstr "Непрочитанные" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Несохраненные изменения" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Вермонт" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Версия" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Не удалось переслать сообщение." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Не удалось импортировать файл библиотеки тем." diff --git a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po index 527f619ac..5c01960c4 100644 --- a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po +++ b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# app vald för återkallande av åtkomst} other {# appar valda för återkallande av åtkomst}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} kan inte nå sina servrar. Den kommer att fortsätta försöka i bakgrunden." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} kunde inte starta" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# textkanal} other {# textkanaler}}, {voiceChannelCount, plural, one {# röstkanal} other {# röstkanaler}}, {categoryCount, plural, one {# kategori} other {# kategorier}}, {roleCount, plural, one {# roll} other {# roller}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} kopia" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Autentiseringskod" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Upphovsman" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Kommer du inte åt den e-postadressen?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Kan inte ansluta" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Hittar inte {path}. Använder den senast inlästa versionen." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Kan inte klistra in bild här" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Kan inte läsa {path}. Använder den senast inlästa versionen." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Kommer snart" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "komma, separerad" @@ -10817,6 +10827,11 @@ msgstr "Beskärning {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS-filer" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Ta bort kategorin \"{categoryName}\"? Detta kan inte ångras." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Ta bort tema" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Ta bort tema?" @@ -13231,7 +13246,7 @@ msgstr "På grund av lagar om vuxet innehåll i {regionName} är detta innehåll msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "På grund av lagar om vuxet innehåll i {regionName} är det här mediet inte tillgängligt från din nuvarande region." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Duplicera" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Aktivera behörigheten {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Aktivera {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Utforska communities" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Exportera" @@ -14885,7 +14900,7 @@ msgstr "Exportera alla meddelanden du någonsin har skickat, plus alla dina kont msgid "Export GIF URLs" msgstr "Exportera GIF-webbadresser" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Exportera bibliotek" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Importera mall från {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Importera en .css-fil för att komma igång, eller klistra in din egen CSS i Snabb-CSS." @@ -18086,7 +18101,9 @@ msgstr "Importen är klar. Lade till {importedCount, plural, one {# GIF} other { msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Importen är klar. Lade till {importedCount, plural, one {# GIF} other {# GIF:ar}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Importera CSS" @@ -18098,7 +18115,7 @@ msgstr "Importera favorit-GIF:ar" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Importera mapp" @@ -18107,7 +18124,7 @@ msgstr "Importera mapp" msgid "Import GIFs" msgstr "Importera GIF:ar" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Importera bibliotek" @@ -18150,13 +18167,13 @@ msgstr "Viktig information:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Importerade {length, plural, one {# temafil} other {# temafiler}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Importerade {themes, plural, one {# tema} other {# teman}} och {assets, plural, one {# resurs} other {# resurser}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Installerar uppdatering för datorappen…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Snabbmeddelanden och VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Snabbmeddelandeklient" @@ -19903,6 +19920,13 @@ msgstr "Länka externa konton och domäner till din {PRODUCT_NAME}-profil. Verif msgid "Link external accounts and domains to your profile" msgstr "Länka externa konton och domäner till din profil" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Länka fil" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Länka ditt {BLUESKY_PROVIDER_NAME}-konto eller verifiera domänägarska msgid "Linked" msgstr "Länkad" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Länkade {length, plural, one {# tema-fil} other {# tema-filer}}. Ändringar du sparar i dem tillämpas direkt." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Länkade konton" msgid "Linked devices" msgstr "Länkade enheter" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Länkad fil ej tillgänglig" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Länkad till {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Länkad till {path}. Redigera filen i valfri redigerare och sparade ändringar tillämpas här direkt." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Länk till en fil" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Åsidosättanden av meddelandefält" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "inget textinnehåll" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Inget tema valt." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Inga teman matchar din sökning." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Inga teman har sparats än." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Välj en leverantör för omvänd bildsökning" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Välj ett tema till vänster för att redigera dess namn, metadata och CSS. Eller importera ett nytt." @@ -27320,7 +27369,7 @@ msgstr "Ta bort från sparade medier" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Sluta visa överst" @@ -28959,7 +29008,7 @@ msgstr "Spara ikon" msgid "Save some media from messages to get started!" msgstr "Spara medier från meddelanden för att komma igång!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Spara tema" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Sök på webben" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Sök teman…" @@ -32504,7 +32553,7 @@ msgstr "Förbli helt interaktiv när appen inte är i fokus" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Visa alltid överst" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Tagg" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Taggar" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Temafärg" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "Temats CSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Tema hittades inte" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Tema sparat." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Detta återbetalar din senaste faktura och avslutar eventuella tillhörande abonnemang. Du kan inte själv begära en ny återbetalning under de närmaste 30 dagarna." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Detta tar bort \"{themeName}\" från den här enheten." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Betrodda domäner rensade." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Prova ett annat namn eller rensa sökningen." @@ -36496,6 +36545,11 @@ msgstr "okänt-omnämnande" msgid "unknown-role" msgstr "okänd-roll" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Koppla bort" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Märke för olästa meddelanden" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Olästa meddelanden" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Olästa meddelanden: {count}" @@ -36807,7 +36861,7 @@ msgstr "Olästa meddelanden: {count}" msgid "Unreads" msgstr "Olästa" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Osparade ändringar" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Version" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Vi kunde inte vidarebefordra meddelandet just nu." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Vi kunde inte importera den temabiblioteksfilen." diff --git a/fluxer_app/src/features/i18n/locales/th/messages.po b/fluxer_app/src/features/i18n/locales/th/messages.po index ab2fa9fed..d4d443165 100644 --- a/fluxer_app/src/features/i18n/locales/th/messages.po +++ b/fluxer_app/src/features/i18n/locales/th/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {เลือกไว้ # แอปเพื่อเพิกถอนสิทธิ์การเข้าถึง} other {เลือกไว้ # แอปเพื่อเพิกถอนสิทธิ์การเข้าถึง}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้ จะพยายามอีกครั้งในเบื้องหลัง" #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} เริ่มทำงานไม่สำเร็จ" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, other {ช่องข้อความ # ช่อง}}, {voiceChannelCount, plural, other {ช่องเสียง # ช่อง}}, {categoryCount, plural, other {# หมวดหมู่}}, {roleCount, plural, other {# บทบาท}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} (สำเนา)" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "รหัสยืนยันตัวตน" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "ผู้สร้าง" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "เข้าถึงอีเมลนั้นไม่ได้ใช่ไหม" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "ไม่สามารถเชื่อมต่อได้" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "ไม่พบ {path} กำลังใช้เวอร์ชันล่าสุดที่โหลดไว้" + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "วางรูปภาพที่นี่ไม่ได้" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "ไม่สามารถอ่าน {path} ได้ กำลังใช้เวอร์ชันล่าสุดที่โหลดไว้" + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "เร็วๆ นี้" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "คั่นด้วยจุลภาค" @@ -10817,6 +10827,11 @@ msgstr "กำลังครอบตัด {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "ไฟล์ CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "เดลาแวร์" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "ลบหมวดหมู่ \"{categoryName}\" ใช่หรือไม่ การดำเนินการนี้จะยกเลิกไม่ได้" #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "ลบธีม" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "ลบธีมหรือไม่" @@ -13231,7 +13246,7 @@ msgstr "เนื่องจากกฎหมายเนื้อหาสำ msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "เนื่องจากกฎหมายเนื้อหาสำหรับผู้ใหญ่ใน {regionName} สื่อนี้จึงไม่สามารถใช้งานได้ในภูมิภาคปัจจุบันของคุณ" -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "ทำซ้ำ" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "เปิดใช้งานสิทธิ์ {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "เปิดใช้งาน {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "สำรวจคอมมูนิตี้" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "ส่งออก" @@ -14885,7 +14900,7 @@ msgstr "ส่งออกข้อความทั้งหมดที่ค msgid "Export GIF URLs" msgstr "ส่งออก URL ของ GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "ส่งออกคลัง" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "นำเข้าเทมเพลตจาก {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "นำเข้าไฟล์ .css เพื่อเริ่มต้น หรือวาง CSS ของคุณใน Quick CSS" @@ -18086,7 +18101,9 @@ msgstr "นำเข้าเสร็จสมบูรณ์ เพิ่ม { msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "นำเข้าเสร็จสมบูรณ์ เพิ่ม GIF แล้ว {importedCount, plural, one {# รายการ} other {# รายการ}}" -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "นำเข้า CSS" @@ -18098,7 +18115,7 @@ msgstr "นำเข้า GIF รายการโปรด" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "นำเข้าโฟลเดอร์" @@ -18107,7 +18124,7 @@ msgstr "นำเข้าโฟลเดอร์" msgid "Import GIFs" msgstr "นำเข้า GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "นำเข้าคลังธีม" @@ -18150,13 +18167,13 @@ msgstr "ข้อมูลสำคัญ:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "นำเข้าไฟล์ธีมแล้ว {length, plural, one {# ไฟล์} other {# ไฟล์}}" #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "นำเข้า {themes, plural, one {# ธีม} other {# ธีม}} และ {assets, plural, one {# ไฟล์ประกอบ} other {# ไฟล์ประกอบ}} แล้ว" @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "กำลังติดตั้งการอัปเดตเดสก์ท็อป…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "การส่งข้อความโต้ตอบทันทีและ VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "แอปส่งข้อความโต้ตอบทันที" @@ -19903,6 +19920,13 @@ msgstr "เชื่อมต่อบัญชีและโดเมนภา msgid "Link external accounts and domains to your profile" msgstr "เชื่อมต่อบัญชีและโดเมนภายนอกเข้ากับโปรไฟล์ของคุณ" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "เชื่อมโยงไฟล์" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "ลิงก์บัญชี {BLUESKY_PROVIDER_NAME} ของคุ msgid "Linked" msgstr "เชื่อมโยงแล้ว" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "ไฟล์ธีมที่เชื่อมโยงไว้ {length, plural, one {# ไฟล์ธีม} other {# ไฟล์ธีม}} การเปลี่ยนแปลงที่คุณบันทึกจะนำไปใช้ทันที" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "บัญชีที่เชื่อมโยง" msgid "Linked devices" msgstr "อุปกรณ์ที่เชื่อมโยง" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "ไฟล์ที่เชื่อมโยงไม่พร้อมใช้งาน" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "เชื่อมโยงไปยัง {path}" + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "เชื่อมโยงกับ {path} แล้ว แก้ไขไฟล์ในโปรแกรมแก้ไขใดก็ได้ แล้วการเปลี่ยนแปลงที่บันทึกไว้จะนำไปใช้ที่นี่ทันที" + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "เชื่อมโยงกับไฟล์" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "การแทนที่ค่า Nagbar" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "ไม่มีข้อความ" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "ไม่ได้เลือกธีม" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "ไม่มีธีมที่ตรงกับการค้นหาของคุณ" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "ยังไม่มีธีมที่บันทึกไว้" @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "เลือกผู้ให้บริการค้นหารูปภาพย้อนกลับ" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "เลือกธีมทางซ้ายเพื่อแก้ไขชื่อ ข้อมูลเมตา และ CSS หรือนำเข้าธีมใหม่" @@ -27320,7 +27369,7 @@ msgstr "ลบออกจากสื่อที่บันทึกไว้ #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "เลิกตรึงไว้ด้านบน" @@ -28959,7 +29008,7 @@ msgstr "บันทึกไอคอน" msgid "Save some media from messages to get started!" msgstr "บันทึกสื่อจากข้อความเพื่อเริ่มต้นใช้งาน" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "บันทึกธีม" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "ค้นหาในเว็บ" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "ค้นหาธีม…" @@ -32504,7 +32553,7 @@ msgstr "ใช้งานได้เต็มที่แม้ไม่ได #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "ตรึงไว้ด้านบน" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "แท็ก" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "แท็ก" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "สีของธีม" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS ของธีม" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "ไม่พบธีม" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "บันทึกธีมแล้ว" @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "ระบบจะคืนเงินสำหรับใบแจ้งหนี้ล่าสุดของคุณและยกเลิกการสมัครสมาชิกที่เกี่ยวข้อง คุณจะไม่สามารถคืนเงินด้วยตนเองได้อีกเป็นเวลา 30 วัน" #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "การดำเนินการนี้จะลบ \"{themeName}\" ออกจากอุปกรณ์นี้" @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "ล้างโดเมนที่เชื่อถือได้แล้ว" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "ลองใช้ชื่ออื่นหรือล้างการค้นหา" @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "ยกเลิกการเชื่อมโยง" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "ป้ายข้อความที่ยังไม่ได้อ่าน" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "ข้อความที่ยังไม่ได้อ่าน" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "ข้อความที่ยังไม่ได้อ่าน: {count}" @@ -36807,7 +36861,7 @@ msgstr "ข้อความที่ยังไม่ได้อ่าน: { msgid "Unreads" msgstr "ยังไม่ได้อ่าน" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "การเปลี่ยนแปลงที่ยังไม่ได้บันทึก" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "เวอร์มอนต์" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "เวอร์ชัน" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "ขณะนี้ไม่สามารถส่งต่อข้อความได้" #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "เราไม่สามารถนำเข้าไฟล์คลังธีมนั้นได้" diff --git a/fluxer_app/src/features/i18n/locales/tr/messages.po b/fluxer_app/src/features/i18n/locales/tr/messages.po index a7b82a45f..27c360812 100644 --- a/fluxer_app/src/features/i18n/locales/tr/messages.po +++ b/fluxer_app/src/features/i18n/locales/tr/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {Erişimi iptal edilmek üzere # uygulama seçildi} other {Erişimi iptal edilmek üzere # uygulama seçildi}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} sunucularına bağlanamıyor. Arka planda tekrar denemeye devam edecek." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} başlatılamadı" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# metin kanalı} other {# metin kanalı}}, {voiceChannelCount, plural, one {# sesli kanal} other {# sesli kanal}}, {categoryCount, plural, one {# kategori} other {# kategori}}, {roleCount, plural, one {# rol} other {# rol}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} kopyası" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Kimlik doğrulayıcı kodu" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Yazar" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "E-postanıza erişemiyor musunuz?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Bağlanamıyor" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "{path} bulunamadı. Son yüklenen sürüm kullanılıyor." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Görsel buraya yapıştırılamıyor" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "{path} okunamadı. Son yüklenen sürüm kullanılıyor." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Çok yakında" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "virgülle ayrılmış" @@ -10817,6 +10827,11 @@ msgstr "{percent}% kırpılıyor" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS dosyaları" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "\"{categoryName}\" kategorisi silinsin mi? Bu işlem geri alınamaz." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Temayı sil" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Tema silinsin mi?" @@ -13231,7 +13246,7 @@ msgstr "{regionName} bölgesindeki yetişkinlere yönelik içerik yasaları nede msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "{regionName} bölgesindeki yetişkinlere yönelik içerik yasaları nedeniyle bu medya, bulunduğunuz bölgeden kullanılamıyor." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Çoğalt" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "{permissionName} iznini etkinleştir" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "{themeName} temasını etkinleştir" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Toplulukları keşfet" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Dışa aktar" @@ -14885,7 +14900,7 @@ msgstr "Gönderdiğiniz tüm mesajları, hesap ayarlarınızı, üyeliklerinizi msgid "Export GIF URLs" msgstr "GIF URL'lerini dışa aktar" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Kütüphaneyi dışa aktar" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "{theOtherPlatform} şablonunu içe aktar" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Başlamak için bir .css dosyası içe aktarın veya Hızlı CSS'ye kendi CSS'nizi yapıştırın." @@ -18086,7 +18101,9 @@ msgstr "İçe aktarma tamamlandı. {importedCount, plural, one {# GIF eklendi} o msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "İçe aktarma tamamlandı. {importedCount, plural, one {# GIF eklendi} other {# GIF eklendi}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "CSS içe aktar" @@ -18098,7 +18115,7 @@ msgstr "Favori GIF'leri içe aktar" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Klasörü içe aktar" @@ -18107,7 +18124,7 @@ msgstr "Klasörü içe aktar" msgid "Import GIFs" msgstr "GIF'leri içe aktar" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Kütüphaneyi içe aktar" @@ -18150,13 +18167,13 @@ msgstr "Önemli bilgiler:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "{length, plural, one {# tema dosyası} other {# tema dosyası}} içe aktarıldı." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "{themes, plural, one {# tema} other {# tema}} ve {assets, plural, one {# öğe} other {# öğe}} içe aktarıldı." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Masaüstü güncellemesi yükleniyor…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Anlık mesajlaşma ve VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Anlık mesajlaşma uygulaması" @@ -19903,6 +19920,13 @@ msgstr "Harici hesapları ve alan adlarını {PRODUCT_NAME} profilinize bağlay msgid "Link external accounts and domains to your profile" msgstr "Harici hesapları ve alan adlarını profilinize bağlayın" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Dosyayı bağla" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Profilinizde göstermek için {BLUESKY_PROVIDER_NAME} hesabınızı bağ msgid "Linked" msgstr "Bağlı" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Bağlı {length, plural, one {# tema dosyası} other {# tema dosyası}}. Kaydettiğiniz değişiklikler hemen uygulanır." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Bağlı hesaplar" msgid "Linked devices" msgstr "Bağlı cihazlar" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Bağlı dosya kullanılamıyor" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "{path}'e bağlı." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "{path} bağlantılı. Dosyayı herhangi bir düzenleyicide düzenleyip kaydettiğiniz değişiklikler hemen burada uygulanır." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Dosyaya bağlı" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Nagbar geçersiz kılmaları" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "metin içeriği yok" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Tema seçilmedi." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Aramanızla eşleşen tema yok." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Henüz kaydedilmiş tema yok." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Ters görsel arama sağlayıcısı seçin" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Adını, meta verilerini ve CSS'ini düzenlemek için soldan bir tema seçin. Ya da yeni bir tane içe aktarın." @@ -27320,7 +27369,7 @@ msgstr "Kayıtlı medyadan kaldır" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Üstte kalmayı bırak" @@ -28959,7 +29008,7 @@ msgstr "Simgeyi kaydet" msgid "Save some media from messages to get started!" msgstr "Başlamak için mesajlardan biraz medya kaydedin!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Temayı kaydet" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Web'de ara" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Temalarda ara…" @@ -32504,7 +32553,7 @@ msgstr "Odaklanılmadığında tam etkileşimli kal" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Üstte kal" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Etiket" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Etiketler" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Tema rengi" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "Tema CSS'i" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Tema bulunamadı" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Tema kaydedildi." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Bu işlem, en son faturanızı iade eder ve ilgili tüm abonelikleri iptal eder. 30 gün boyunca yeniden kendiniz iade talep edemezsiniz." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Bu işlem \"{themeName}\" temasını bu cihazdan kaldırır." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Güvenilen alan adları temizlendi." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Farklı bir ad deneyin veya aramayı temizleyin." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Bağlantıyı Kes" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Okunmamış mesaj rozeti" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Okunmamış mesajlar" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Okunmamış mesajlar: {count}" @@ -36807,7 +36861,7 @@ msgstr "Okunmamış mesajlar: {count}" msgid "Unreads" msgstr "Okunmamışlar" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Kaydedilmemiş değişiklikler" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Sürüm" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Şu anda mesajı iletemedik." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Bu tema kitaplığı dosyası içe aktarılamadı." diff --git a/fluxer_app/src/features/i18n/locales/uk/messages.po b/fluxer_app/src/features/i18n/locales/uk/messages.po index 703189b56..bc46a7519 100644 --- a/fluxer_app/src/features/i18n/locales/uk/messages.po +++ b/fluxer_app/src/features/i18n/locales/uk/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# застосунок обрано для відкликання доступу} few {# застосунки обрано для відкликання доступу} many {# застосунків обрано для відкликання доступу} other {# застосунка обрано для відкликання доступу}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} не може підключитися до своїх серверів. Програма продовжуватиме спроби у фоновому режимі." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "Не вдалося запустити {appName}" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, one {# текстовий канал} few {# текстові канали} many {# текстових каналів} other {# текстового каналу}}, {voiceChannelCount, plural, one {# голосовий канал} few {# голосові канали} many {# голосових каналів} other {# голосового каналу}}, {categoryCount, plural, one {# категорія} few {# категорії} many {# категорій} other {# категорії}}, {roleCount, plural, one {# роль} few {# ролі} many {# ролей} other {# ролі}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Копія {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Код автентифікатора" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Автор" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Немає доступу до цієї електронної адреси?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Не вдалося підключитися" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Не вдалося знайти {path}. Використовується остання завантажена версія." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Сюди не можна вставити зображення" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Не вдалося прочитати {path}. Використовується остання завантажена версія." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Незабаром" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "розділені, комами" @@ -10817,6 +10827,11 @@ msgstr "Обрізання {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "Файли CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Делавер" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Видалити категорію «{categoryName}»? Цю дію не можна скасувати." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Видалити тему" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Видалити тему?" @@ -13231,7 +13246,7 @@ msgstr "Через закони про контент для дорослих у msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Через закони про контент для дорослих у регіоні {regionName} цей медіафайл недоступний у вашому поточному регіоні." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Дублювати" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Увімкнути дозвіл «{permissionName}»" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Увімкнути {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Знайти спільноти" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Експорт" @@ -14885,7 +14900,7 @@ msgstr "Експортувати всі надіслані вами повідо msgid "Export GIF URLs" msgstr "Експортувати URL-адреси GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Експортувати бібліотеку" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Імпортувати шаблон {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Щоб почати, імпортуйте файл .css або вставте власний CSS у розділ «Швидкий CSS»." @@ -18086,7 +18101,9 @@ msgstr "Імпорт завершено. Додано {importedCount, plural, on msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Імпорт завершено. Додано {importedCount, plural, one {# GIF-файл} few {# GIF-файли} many {# GIF-файлів} other {# GIF-файлу}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Імпортувати CSS" @@ -18098,7 +18115,7 @@ msgstr "Імпортувати вибрані GIF" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Імпортувати папку" @@ -18107,7 +18124,7 @@ msgstr "Імпортувати папку" msgid "Import GIFs" msgstr "Імпортувати GIF-файли" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Імпортувати бібліотеку" @@ -18150,13 +18167,13 @@ msgstr "Важлива інформація:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Імпортовано {length, plural, one {# файл теми} few {# файли тем} many {# файлів тем} other {# файлу теми}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Імпортовано {themes, plural, one {# тему} few {# теми} many {# тем} other {# теми}} та {assets, plural, one {# ресурс} few {# ресурси} many {# ресурсів} other {# ресурсу}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Встановлення оновлення для комп'ютера…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Обмін миттєвими повідомленнями та VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Месенджер" @@ -19903,6 +19920,13 @@ msgstr "Прив'яжіть зовнішні облікові записи та msgid "Link external accounts and domains to your profile" msgstr "Прив'яжіть зовнішні облікові записи та домени до свого профілю" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Зв'язати файл" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Прив'яжіть свій обліковий запис {BLUESKY_PROV msgid "Linked" msgstr "Прив'язані" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Пов’язано {length, plural, one {# файл теми} few {# файли теми} many {# файлів теми} other {# файлів теми}}. Зміни, які ви збережете, застосуються одразу." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Прив'язані облікові записи" msgid "Linked devices" msgstr "Підключені пристрої" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Файл не знайдено" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Пов’язано з {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Пов'язано з {path}. Редагуйте файл у будь-якому редакторі, і збережені зміни одразу ж тут застосуються." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Пов'язано з файлом" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Перевизначення нагбара" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "немає текстового вмісту" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Тему не вибрано." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Немає тем, що відповідають вашому пошуку." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Ще немає збережених тем." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Виберіть постачальника зворотного пошуку зображень" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Виберіть тему ліворуч, щоб змінити її назву, метадані та CSS. Або імпортуйте нову." @@ -27320,7 +27369,7 @@ msgstr "Видалити зі збережених медіа" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Зняти закріплення" @@ -28959,7 +29008,7 @@ msgstr "Зберегти іконку" msgid "Save some media from messages to get started!" msgstr "Збережіть медіа з повідомлень, щоб почати!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Зберегти тему" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Шукати в інтернеті" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Пошук тем…" @@ -32504,7 +32553,7 @@ msgstr "Залишатися повністю інтерактивним, кол #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Поверх інших вікон" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Тег" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Теги" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Колір теми" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS теми" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Тему не знайдено" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Тему збережено." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Це відшкодує ваш останній рахунок і скасує будь-яку пов'язану підписку. Ви не зможете самостійно повернути кошти ще раз протягом 30 днів." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Це видалить «{themeName}» з цього пристрою." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Довірені домени очищено." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Спробуйте іншу назву або очистіть пошук." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Від'єднати" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Значок непрочитаних повідомлень" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Непрочитані повідомлення" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Непрочитані повідомлення: {count}" @@ -36807,7 +36861,7 @@ msgstr "Непрочитані повідомлення: {count}" msgid "Unreads" msgstr "Непрочитані" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Незбережені зміни" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Вермонт" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Версія" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Наразі не вдалося переслати повідомлення." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Не вдалося імпортувати файл бібліотеки тем." diff --git a/fluxer_app/src/features/i18n/locales/vi/messages.po b/fluxer_app/src/features/i18n/locales/vi/messages.po index 9c7341fa5..2432fd960 100644 --- a/fluxer_app/src/features/i18n/locales/vi/messages.po +++ b/fluxer_app/src/features/i18n/locales/vi/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {# ứng dụng đã chọn để thu hồi quyền truy cập} other {# ứng dụng đã chọn để thu hồi quyền truy cập}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} không thể kết nối với máy chủ. Ứng dụng sẽ tiếp tục thử lại ở chế độ nền." #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "Không thể khởi động {appName}" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, other {# kênh văn bản}}, {voiceChannelCount, plural, other {# kênh thoại}}, {categoryCount, plural, other {# danh mục}}, {roleCount, plural, other {# vai trò}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "Bản sao của {themeName}" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "Mã xác thực" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "Tác giả" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "Không truy cập được email đó?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "Không thể kết nối" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "Không tìm thấy {path}. Đang sử dụng phiên bản được tải lần cuối." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "Không thể dán ảnh vào đây" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "Không thể đọc {path}. Đang sử dụng phiên bản được tải lần cuối." + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "Sắp ra mắt" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "cách nhau bằng dấu phẩy" @@ -10817,6 +10827,11 @@ msgstr "Đang cắt {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "Tệp CSS" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "Delaware" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "Xóa danh mục \"{categoryName}\"? Không thể hoàn tác." #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "Xóa chủ đề" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "Xóa chủ đề?" @@ -13231,7 +13246,7 @@ msgstr "Do luật về nội dung người lớn ở {regionName}, nội dung n msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "Do luật về nội dung người lớn ở {regionName}, nội dung đa phương tiện này không khả dụng ở khu vực hiện tại của bạn." -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "Tạo bản sao" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "Bật quyền {permissionName}" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "Bật {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "Khám phá cộng đồng" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "Xuất" @@ -14885,7 +14900,7 @@ msgstr "Xuất tất cả tin nhắn bạn đã gửi, cùng với cài đặt t msgid "Export GIF URLs" msgstr "Xuất URL GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "Xuất thư viện" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "Nhập mẫu từ {theOtherPlatform}" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "Nhập tệp .css để bắt đầu hoặc dán CSS của riêng bạn vào CSS nhanh." @@ -18086,7 +18101,9 @@ msgstr "Đã nhập xong. Đã thêm {importedCount, plural, one {# GIF} other { msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "Đã nhập xong. Đã thêm {importedCount, plural, one {# GIF} other {# GIF}}." -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "Nhập CSS" @@ -18098,7 +18115,7 @@ msgstr "Nhập GIF yêu thích" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "Nhập thư mục" @@ -18107,7 +18124,7 @@ msgstr "Nhập thư mục" msgid "Import GIFs" msgstr "Nhập GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "Nhập thư viện" @@ -18150,13 +18167,13 @@ msgstr "Thông tin quan trọng:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "Đã nhập {length, plural, one {# tệp chủ đề} other {# tệp chủ đề}}." #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "Đã nhập {themes, plural, one {# chủ đề} other {# chủ đề}} và {assets, plural, one {# tài nguyên} other {# tài nguyên}}." @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "Đang cài đặt bản cập nhật cho máy tính…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "Nhắn tin tức thời và VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "Trình nhắn tin tức thời" @@ -19903,6 +19920,13 @@ msgstr "Liên kết các tài khoản và miền bên ngoài với hồ sơ {PRO msgid "Link external accounts and domains to your profile" msgstr "Liên kết tài khoản và miền bên ngoài với hồ sơ của bạn" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "Liên kết tệp" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "Liên kết tài khoản {BLUESKY_PROVIDER_NAME} của bạn hoặc xác msgid "Linked" msgstr "Đã liên kết" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "Đã liên kết {length, plural, one {# tệp giao diện} other {# tệp giao diện}}. Thay đổi bạn lưu vào chúng sẽ được áp dụng ngay lập tức." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "Tài khoản đã liên kết" msgid "Linked devices" msgstr "Thiết bị đã liên kết" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "Tệp được liên kết không khả dụng" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "Liên kết tới {path}." + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "Đã liên kết tới {path}. Chỉnh sửa tệp trong bất kỳ trình soạn thảo nào và các thay đổi đã lưu sẽ áp dụng ngay tại đây." + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "Liên kết đến tệp" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Ghi đè thanh thông báo" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "không có nội dung văn bản" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "Chưa chọn chủ đề nào." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "Không có chủ đề nào khớp với tìm kiếm của bạn." #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "Chưa có chủ đề nào được lưu." @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "Chọn nhà cung cấp tìm kiếm hình ảnh ngược" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "Chọn một chủ đề ở bên trái để chỉnh sửa tên, siêu dữ liệu và CSS của chủ đề đó. Hoặc nhập một chủ đề mới." @@ -27320,7 +27369,7 @@ msgstr "Xóa khỏi media đã lưu" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "Bỏ hiển thị trên cùng" @@ -28959,7 +29008,7 @@ msgstr "Lưu biểu tượng" msgid "Save some media from messages to get started!" msgstr "Lưu một vài media từ tin nhắn để bắt đầu!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "Lưu chủ đề" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "Tìm kiếm trên web" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "Tìm kiếm giao diện…" @@ -32504,7 +32553,7 @@ msgstr "Luôn tương tác đầy đủ khi cửa sổ không hoạt động" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "Luôn hiển thị trên cùng" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "Thẻ" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "Thẻ" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "Màu chủ đề" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "CSS chủ đề" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "Không tìm thấy chủ đề" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "Đã lưu chủ đề." @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "Thao tác này sẽ hoàn tiền cho hóa đơn gần đây nhất của bạn và hủy mọi gói đăng ký liên quan. Bạn sẽ không thể tự hoàn tiền lại trong 30 ngày tới." #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "Thao tác này sẽ xóa \"{themeName}\" khỏi thiết bị này." @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "Đã xóa các miền tin cậy." #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "Thử một tên khác hoặc xóa tìm kiếm." @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "Bỏ liên kết" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "Huy hiệu tin nhắn chưa đọc" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "Tin nhắn chưa đọc" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "Tin nhắn chưa đọc: {count}" @@ -36807,7 +36861,7 @@ msgstr "Tin nhắn chưa đọc: {count}" msgid "Unreads" msgstr "Chưa đọc" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "Thay đổi chưa lưu" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "Vermont" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "Phiên bản" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "Chúng tôi không thể chuyển tiếp tin nhắn vào lúc này." #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "Không thể nhập tệp thư viện chủ đề đó." diff --git a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po index d9eb35406..716468dec 100644 --- a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "已选择 {appCount, plural, other {# 个应用}},将撤销其访问权限" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} 无法连接到服务器。它将在后台继续尝试。" #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} 启动失败" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, other {# 个文字频道}},{voiceChannelCount, plural, other {# 个语音频道}},{categoryCount, plural, other {# 个类别}},{roleCount, plural, other {# 个身份组}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} 副本" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "身份验证器验证码" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "作者" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "无法访问该邮箱?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "无法连接" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "找不到 {path}。正在使用上次加载的版本。" + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "无法在此处粘贴图片" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "无法读取 {path}。正在使用上次加载的版本。" + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "即将推出" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "逗号分隔" @@ -10817,6 +10827,11 @@ msgstr "正在裁剪 {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS 文件" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "特拉华州" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "删除类别\"{categoryName}\"?此操作无法撤销。" #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "删除主题" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "删除主题?" @@ -13231,7 +13246,7 @@ msgstr "由于{regionName}的成人内容法律,此内容无法在此处查看 msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "由于{regionName}的成人内容法律,此媒体在你当前所在地区不可用。" -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "复制" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "启用“{permissionName}”权限" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "启用 {themeName}" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "探索社区" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "导出" @@ -14885,7 +14900,7 @@ msgstr "导出你发送过的所有消息,以及你的全部账号设置、成 msgid "Export GIF URLs" msgstr "导出 GIF 链接" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "导出主题库" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "导入 {theOtherPlatform} 模板" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "导入 .css 文件即可开始,或在“快速 CSS”中粘贴你自己的 CSS。" @@ -18086,7 +18101,9 @@ msgstr "导入完成。已添加 {importedCount, plural, other {# 张 GIF}}, msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "导入完成。已添加 {importedCount, plural, other {# 张 GIF}}。" -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "导入 CSS" @@ -18098,7 +18115,7 @@ msgstr "导入收藏的 GIF" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "导入文件夹" @@ -18107,7 +18124,7 @@ msgstr "导入文件夹" msgid "Import GIFs" msgstr "导入 GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "导入主题库" @@ -18150,13 +18167,13 @@ msgstr "重要信息:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "已导入 {length, plural, other {# 个主题文件}}。" #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "已导入 {themes, plural, other {# 个主题}} 和 {assets, plural, other {# 个素材}}。" @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "正在安装桌面版更新…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "即时通讯与 VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "即时通讯软件" @@ -19903,6 +19920,13 @@ msgstr "将外部账号和域名关联到你的 {PRODUCT_NAME} 个人资料。 msgid "Link external accounts and domains to your profile" msgstr "关联外部账号和域名到你的个人资料" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "链接文件" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "关联你的 {BLUESKY_PROVIDER_NAME} 账号或验证域名所有权, msgid "Linked" msgstr "已关联" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "已链接 {length, plural, one {# 个主题文件} other {# 个主题文件}}。对它们的更改会立即生效。" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "关联账号" msgid "Linked devices" msgstr "已关联设备" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "链接文件不可用" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "已链接到 {path}。" + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "已链接到 {path}。在任何编辑器中编辑文件,保存的更改会立即在此处生效。" + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "链接到文件" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "提示栏覆盖" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "无文本内容" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "未选择主题。" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "没有符合你搜索条件的主题。" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "暂未保存主题。" @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "选择反向图片搜索提供方" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "在左侧选择一个主题,编辑其名称、元数据和 CSS。或导入新主题。" @@ -27320,7 +27369,7 @@ msgstr "从已保存媒体中移除" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "取消置顶" @@ -28959,7 +29008,7 @@ msgstr "保存图标" msgid "Save some media from messages to get started!" msgstr "从消息中保存一些媒体,即可开始使用!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "保存主题" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "网页搜索" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "搜索主题…" @@ -32504,7 +32553,7 @@ msgstr "失去焦点时仍可完全交互" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "置顶" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "标签" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "标签" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "主题颜色" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "主题 CSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "未找到主题" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "主题已保存。" @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "此操作将退还你最近一笔账单的款项,并取消相关订阅。30 天内你将无法再次自助退款。" #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "这会从本设备中移除“{themeName}”。" @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "已清除受信任域名。" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "尝试其他名称或清除搜索。" @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "取消链接" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "未读消息角标" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "未读消息" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "未读消息:{count}" @@ -36807,7 +36861,7 @@ msgstr "未读消息:{count}" msgid "Unreads" msgstr "未读消息" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "未保存的更改" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "佛蒙特州" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "版本" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "暂时无法转发消息。" #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "无法导入该主题库文件。" diff --git a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po index a602d9004..ee2ff741b 100644 --- a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po @@ -843,12 +843,12 @@ msgid "{appCount, plural, one {# app selected for access revocation} other {# ap msgstr "{appCount, plural, one {已選取 # 個應用程式以撤銷存取權} other {已選取 # 個應用程式以撤銷存取權}}" #. Body of the native dialog shown when the desktop app has repeatedly failed to load. {appName} is the desktop app name (typically Fluxer). The app keeps retrying on its own while the dialog is open. -#: src/features/platform/utils/DesktopLocaleBridge.ts:295 +#: src/features/platform/utils/DesktopLocaleBridge.ts:308 msgid "{appName} can't reach its servers. It will keep trying in the background." msgstr "{appName} 無法連線到伺服器。它會在背景持續嘗試連線。" #. Title of the native error dialog shown when the desktop app cannot boot. {appName} is the desktop app name (typically Fluxer). -#: src/features/platform/utils/DesktopLocaleBridge.ts:285 +#: src/features/platform/utils/DesktopLocaleBridge.ts:298 msgid "{appName} failed to start" msgstr "{appName} 無法啟動" @@ -2001,7 +2001,7 @@ msgid "{textChannelCount, plural, one {# text channel} other {# text channels}}, msgstr "{textChannelCount, plural, other {# 個文字頻道}}、{voiceChannelCount, plural, other {# 個語音頻道}}、{categoryCount, plural, other {# 個類別}}、{roleCount, plural, other {# 個身分組}}" #. Name given to the copy created by the Duplicate button in the Theme Studio theme library. {themeName} is the name of the theme being duplicated. -#: src/features/theme/state/ThemeLibrary.ts:32 +#: src/features/theme/state/ThemeLibrary.ts:34 msgid "{themeName} Copy" msgstr "{themeName} 副本" @@ -4998,7 +4998,7 @@ msgid "Authenticator code" msgstr "驗證器代碼" #. Short label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:109 +#: src/features/theme_studio/sections/LibrarySection.tsx:112 msgid "Author" msgstr "作者" @@ -6512,15 +6512,25 @@ msgid "Can't access that email?" msgstr "無法存取該電子郵件信箱?" #. Title of the native dialog shown when the desktop app has repeatedly failed to load because it cannot reach the servers. -#: src/features/platform/utils/DesktopLocaleBridge.ts:290 +#: src/features/platform/utils/DesktopLocaleBridge.ts:303 msgid "Can't connect" msgstr "無法連線" +#. Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:166 +msgid "Can't find {path}. Using the last loaded version." +msgstr "找不到 {path}。正在使用上次載入的版本。" + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:12 msgid "Can't paste image here" msgstr "無法在這裡貼上圖片" +#. Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file. +#: src/features/theme_studio/sections/LibrarySection.tsx:171 +msgid "Can't read {path}. Using the last loaded version." +msgstr "無法讀取 {path}。正在使用上次載入的版本。" + #. Error message in the attachment permission denied modal. Keep the tone plain and specific. #: src/features/messaging/components/alerts/AttachmentPermissionDeniedModal.tsx:16 msgid "Can't upload files here" @@ -8609,7 +8619,7 @@ msgid "Coming soon" msgstr "即將推出" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:121 +#: src/features/theme_studio/sections/LibrarySection.tsx:124 msgid "comma, separated" msgstr "以逗號分隔" @@ -10817,6 +10827,11 @@ msgstr "正在裁切 {percent}%" msgid "CSS" msgstr "CSS" +#. Name of the file type filter in the native theme file picker, shown next to the *.css pattern. +#: src/features/platform/utils/DesktopLocaleBridge.ts:284 +msgid "CSS files" +msgstr "CSS 檔案" + #. Keyboard keycap label for Control on non-Mac platforms. Keep it short. #. Keyboard shortcut keycap label for Control on non-Mac platforms. Keep it short. #: src/features/input/components/modals/KeyboardModeIntroModal.tsx:18 @@ -11568,7 +11583,7 @@ msgstr "德拉瓦州" #: src/features/messaging/commands/MessageCommands.tsx:83 #: src/features/moderation/components/report_modal/IARModalCopy.ts:109 #: src/features/platform/utils/DesktopLocaleBridge.ts:77 -#: src/features/theme_studio/sections/LibrarySection.tsx:514 +#: src/features/theme_studio/sections/LibrarySection.tsx:645 #: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:517 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:117 #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabButtonsTab.tsx:290 @@ -11794,12 +11809,12 @@ msgid "Delete the category \"{categoryName}\"? Can't be undone." msgstr "刪除類別「{categoryName}」?此動作無法復原。" #. Button or menu action label in the theme studio library section. Keep it concise. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:59 +#: src/features/theme_studio/sections/LibrarySection.tsx:62 msgid "Delete theme" msgstr "刪除主題" #. Confirmation prompt in the theme studio library section. Keep the tone plain and specific. -#: src/features/theme_studio/sections/LibrarySection.tsx:51 +#: src/features/theme_studio/sections/LibrarySection.tsx:54 msgid "Delete theme?" msgstr "刪除主題?" @@ -13231,7 +13246,7 @@ msgstr "由於{regionName}的成人內容法規,此內容無法在此處提供 msgid "Due to mature content laws in {regionName}, this media is not available from your current region." msgstr "由於{regionName}的成人內容法規,此媒體在您目前的地區無法使用。" -#: src/features/theme_studio/sections/LibrarySection.tsx:503 +#: src/features/theme_studio/sections/LibrarySection.tsx:634 #: src/features/user/components/modals/tabs/component_gallery_tab/index.tsx:220 msgid "Duplicate" msgstr "複製" @@ -13858,7 +13873,7 @@ msgid "Enable {permissionName} permission" msgstr "啟用「{permissionName}」權限" #. Accessible label for the switch that enables a saved theme file. -#: src/features/theme_studio/sections/LibrarySection.tsx:101 +#: src/features/theme_studio/sections/LibrarySection.tsx:104 msgid "Enable {themeName}" msgstr "啟用「{themeName}」" @@ -14870,7 +14885,7 @@ msgid "Explore communities" msgstr "探索社群" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/theme_studio/sections/LibrarySection.tsx:494 +#: src/features/theme_studio/sections/LibrarySection.tsx:625 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:208 msgid "Export" msgstr "匯出" @@ -14885,7 +14900,7 @@ msgstr "匯出您傳送過的每則訊息,以及所有帳號設定、成員資 msgid "Export GIF URLs" msgstr "匯出 GIF 網址" -#: src/features/theme_studio/sections/LibrarySection.tsx:376 +#: src/features/theme_studio/sections/LibrarySection.tsx:459 msgid "Export library" msgstr "匯出主題庫" @@ -18072,7 +18087,7 @@ msgid "Import {theOtherPlatform} template" msgstr "匯入 {theOtherPlatform} 範本" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:97 +#: src/features/theme_studio/sections/LibrarySection.tsx:100 msgid "Import a .css file to get started, or paste your own CSS in Quick CSS." msgstr "匯入 .css 檔案即可開始,或將您的 CSS 貼到「快速 CSS」。" @@ -18086,7 +18101,9 @@ msgstr "匯入完成。已新增 {importedCount, plural, one {# 個 GIF} other { msgid "Import complete. Added {importedCount, plural, one {# GIF} other {# GIFs}}." msgstr "匯入完成。已新增 {importedCount, plural, one {# 個 GIF} other {# 個 GIF}}。" -#: src/features/theme_studio/sections/LibrarySection.tsx:337 +#. Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved. +#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/theme_studio/sections/LibrarySection.tsx:420 #: src/features/theme_studio/sections/QuickCssSection.tsx:190 msgid "Import CSS" msgstr "匯入 CSS" @@ -18098,7 +18115,7 @@ msgstr "匯入我的最愛 GIF" #. Title of the native folder picker that imports a directory of theme files. #: src/features/platform/utils/DesktopLocaleBridge.ts:271 -#: src/features/theme_studio/sections/LibrarySection.tsx:349 +#: src/features/theme_studio/sections/LibrarySection.tsx:432 msgid "Import folder" msgstr "匯入資料夾" @@ -18107,7 +18124,7 @@ msgstr "匯入資料夾" msgid "Import GIFs" msgstr "匯入 GIF" -#: src/features/theme_studio/sections/LibrarySection.tsx:361 +#: src/features/theme_studio/sections/LibrarySection.tsx:444 msgid "Import library" msgstr "匯入主題庫" @@ -18150,13 +18167,13 @@ msgstr "重要資訊:" #. Toast after importing one or more CSS files from a local theme folder. #. Toast after importing one or more CSS files into the theme library. -#: src/features/theme_studio/sections/LibrarySection.tsx:64 -#: src/features/theme_studio/sections/LibrarySection.tsx:68 +#: src/features/theme_studio/sections/LibrarySection.tsx:67 +#: src/features/theme_studio/sections/LibrarySection.tsx:71 msgid "Imported {length, plural, one {# theme file} other {# theme files}}." msgstr "已匯入 {length, plural, one {# 個主題檔案} other {# 個主題檔案}}。" #. Toast after importing a Theme Studio library export file. -#: src/features/theme_studio/sections/LibrarySection.tsx:72 +#: src/features/theme_studio/sections/LibrarySection.tsx:75 msgid "Imported {themes, plural, one {# theme} other {# themes}} and {assets, plural, one {# asset} other {# assets}}." msgstr "已匯入 {themes, plural, one {# 個主題} other {# 個主題}}和 {assets, plural, one {# 個素材} other {# 個素材}}。" @@ -18564,12 +18581,12 @@ msgid "Installing desktop update…" msgstr "正在安裝桌面版更新…" #. Comment of the Linux .desktop entry. One-line app description shown as a tooltip in Linux launchers and software centres. VoIP is voice over IP; keep the term if it is used untranslated in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:305 +#: src/features/platform/utils/DesktopLocaleBridge.ts:318 msgid "Instant messaging and VoIP" msgstr "即時通訊與 VoIP" #. GenericName of the Linux .desktop entry. The category of app shown next to the name in GNOME Activities, KDE Kickoff and software centres. Use the generic term for a chat app in your language. -#: src/features/platform/utils/DesktopLocaleBridge.ts:300 +#: src/features/platform/utils/DesktopLocaleBridge.ts:313 msgid "Instant Messenger" msgstr "即時通訊軟體" @@ -19903,6 +19920,13 @@ msgstr "將外部帳號和網域連結到您的 {PRODUCT_NAME} 個人檔案。 msgid "Link external accounts and domains to your profile" msgstr "將外部帳號和網域連結到您的個人檔案" +#. Button in the Theme Studio library that links an existing theme to a CSS file on disk so saved changes to the file apply live. +#. Title of the native file picker that links an existing theme to a CSS file on disk. +#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/theme_studio/sections/LibrarySection.tsx:607 +msgid "Link file" +msgstr "連結檔案" + #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. #. Replacement text for an invite URL while streaming privacy is active. @@ -19965,6 +19989,11 @@ msgstr "連結您的 {BLUESKY_PROVIDER_NAME} 帳號或驗證網域所有權, msgid "Linked" msgstr "已連結" +#. Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved. +#: src/features/theme_studio/sections/LibrarySection.tsx:140 +msgid "Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away." +msgstr "連結的 {length, plural, one {# 個佈景主題檔案} other {# 個佈景主題檔案}}。儲存變更後會立即套用。" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/LinkedAccountsIndex.ts:12 msgid "Linked accounts" @@ -19977,6 +20006,26 @@ msgstr "已連結帳號" msgid "Linked devices" msgstr "已連結的裝置" +#. Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read. +#: src/features/theme_studio/sections/LibrarySection.tsx:151 +msgid "Linked file unavailable" +msgstr "連結檔案無法使用" + +#. Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk. +#: src/features/theme_studio/sections/LibrarySection.tsx:161 +msgid "Linked to {path}." +msgstr "連結至 {path}。" + +#. Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked. +#: src/features/theme_studio/sections/LibrarySection.tsx:156 +msgid "Linked to {path}. Edit the file in any editor and saved changes apply here right away." +msgstr "已連結至 {path}。請在任何編輯器中編輯檔案,儲存變更後會立即在此處套用。" + +#. Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live. +#: src/features/theme_studio/sections/LibrarySection.tsx:146 +msgid "Linked to a file" +msgstr "連結至檔案" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the markdown tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/MarkdownTab.tsx:29 @@ -22401,7 +22450,7 @@ msgstr "Nagbar 覆寫" #: src/features/expressions/components/modals/meme_form/MemeFormFields.tsx:24 #: src/features/expressions/components/modals/sticker_form/StickerFormFields.tsx:28 #: src/features/guild/components/modals/guild_tabs/guild_overview_tab/sections/BrandingSection.tsx:27 -#: src/features/theme_studio/sections/LibrarySection.tsx:105 +#: src/features/theme_studio/sections/LibrarySection.tsx:108 #: src/features/user/components/modals/tabs/chat_settings_tab/AddCustomSearchEngineModal.tsx:76 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:57 #: src/features/webhook/components/FollowedChannelListItem.tsx:33 @@ -23343,17 +23392,17 @@ msgid "no text content" msgstr "沒有文字內容" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:129 +#: src/features/theme_studio/sections/LibrarySection.tsx:132 msgid "No theme selected." msgstr "未選取佈景主題。" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:85 +#: src/features/theme_studio/sections/LibrarySection.tsx:88 msgid "No themes match your search." msgstr "沒有符合您搜尋條件的佈景主題。" #. Empty-state text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:89 +#: src/features/theme_studio/sections/LibrarySection.tsx:92 msgid "No themes saved yet." msgstr "尚未儲存任何佈景主題。" @@ -25328,7 +25377,7 @@ msgid "Pick a reverse image search provider" msgstr "選擇以圖搜圖服務供應商" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:133 +#: src/features/theme_studio/sections/LibrarySection.tsx:136 msgid "Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one." msgstr "在左側選擇一個主題,編輯其名稱、中繼資料和 CSS。或匯入新主題。" @@ -27320,7 +27369,7 @@ msgstr "從已儲存的媒體中移除" #. Button label in a popped-out voice window titlebar that unpins the window from staying above others. #. Button label in the Theme Studio popout titlebar that unpins the window from staying above others. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:37 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:39 #: src/features/voice/components/popout/PopoutTitlebar.tsx:18 msgid "Remove from top" msgstr "取消置頂" @@ -28959,7 +29008,7 @@ msgstr "儲存圖示" msgid "Save some media from messages to get started!" msgstr "從訊息儲存一些媒體,即可開始使用!" -#: src/features/theme_studio/sections/LibrarySection.tsx:574 +#: src/features/theme_studio/sections/LibrarySection.tsx:754 msgid "Save theme" msgstr "儲存主題" @@ -29537,7 +29586,7 @@ msgid "Search the web" msgstr "搜尋網路" #. Button or menu action label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:81 +#: src/features/theme_studio/sections/LibrarySection.tsx:84 msgid "Search themes…" msgstr "搜尋主題…" @@ -32504,7 +32553,7 @@ msgstr "即使應用程式不在前景,仍保持完全互動" #. Button label in a popped-out voice window titlebar that pins the window above other windows. #. Button label in the Theme Studio popout titlebar that pins the window above other windows. -#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:33 +#: src/features/theme_studio/ThemeStudioStandaloneApp.tsx:35 #: src/features/voice/components/popout/PopoutTitlebar.tsx:14 msgid "Stay on top" msgstr "置頂" @@ -33463,7 +33512,7 @@ msgid "Tag" msgstr "標籤" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:117 +#: src/features/theme_studio/sections/LibrarySection.tsx:120 msgid "Tags" msgstr "標籤" @@ -34140,7 +34189,7 @@ msgid "Theme color" msgstr "主題顏色" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:125 +#: src/features/theme_studio/sections/LibrarySection.tsx:128 msgid "Theme CSS" msgstr "主題 CSS" @@ -34160,7 +34209,7 @@ msgid "Theme not found" msgstr "找不到主題" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:47 +#: src/features/theme_studio/sections/LibrarySection.tsx:50 msgid "Theme saved." msgstr "主題已儲存。" @@ -34892,7 +34941,7 @@ msgid "This refunds your most recent invoice and cancels any associated subscrip msgstr "這會為您最近一筆帳單退款,並取消相關的訂閱。您在 30 天內將無法再次自行退款。" #. Confirmation text before deleting a saved local theme from Theme Studio. -#: src/features/theme_studio/sections/LibrarySection.tsx:55 +#: src/features/theme_studio/sections/LibrarySection.tsx:58 msgid "This removes \"{themeName}\" from this device." msgstr "這會將「{themeName}」從此裝置移除。" @@ -35638,7 +35687,7 @@ msgid "Trusted domains cleared." msgstr "已清除信任的網域。" #. Description text in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:93 +#: src/features/theme_studio/sections/LibrarySection.tsx:96 msgid "Try a different name or clear the search." msgstr "試試其他名稱或清除搜尋。" @@ -36496,6 +36545,11 @@ msgstr "unknown-mention" msgid "unknown-role" msgstr "unknown-role" +#. Button in the Theme Studio library that stops a theme following its CSS file on disk and turns it back into an editable copy. +#: src/features/theme_studio/sections/LibrarySection.tsx:681 +msgid "Unlink" +msgstr "取消連結" + #: src/features/channel/components/EmojiPicker.tsx:176 #: src/features/channel/components/MobileEmojiPicker.tsx:212 msgid "Unlock {lockedEmojiCount, plural, one {# custom emoji} other {# custom emojis}} from {communityCount, plural, one {# community} other {# communities}} with {PREMIUM_PRODUCT_NAME}." @@ -36793,12 +36847,12 @@ msgid "Unread message badge" msgstr "未讀訊息標記" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers, when there are unread messages but no exact count to show. -#: src/features/platform/utils/DesktopLocaleBridge.ts:275 +#: src/features/platform/utils/DesktopLocaleBridge.ts:288 msgid "Unread messages" msgstr "未讀訊息" #. Accessibility description of the Windows taskbar overlay badge, read by screen readers. {count} is the number of unread messages, already formatted for the locale. -#: src/features/platform/utils/DesktopLocaleBridge.ts:280 +#: src/features/platform/utils/DesktopLocaleBridge.ts:293 msgid "Unread messages: {count}" msgstr "未讀訊息:{count}" @@ -36807,7 +36861,7 @@ msgstr "未讀訊息:{count}" msgid "Unreads" msgstr "未讀訊息" -#: src/features/theme_studio/sections/LibrarySection.tsx:578 +#: src/features/theme_studio/sections/LibrarySection.tsx:758 msgid "Unsaved changes" msgstr "未儲存的變更" @@ -38123,7 +38177,7 @@ msgid "Vermont" msgstr "佛蒙特州" #. Short label in the theme studio library section. Keep it concise. -#: src/features/theme_studio/sections/LibrarySection.tsx:113 +#: src/features/theme_studio/sections/LibrarySection.tsx:116 msgid "Version" msgstr "版本" @@ -39034,7 +39088,7 @@ msgid "We couldn't forward the message at this time." msgstr "目前無法轉傳訊息。" #. Error message in the theme studio library section. -#: src/features/theme_studio/sections/LibrarySection.tsx:77 +#: src/features/theme_studio/sections/LibrarySection.tsx:80 msgid "We couldn't import that theme library file." msgstr "我們無法匯入該主題庫檔案。" diff --git a/fluxer_app/src/features/platform/types/Electron.ts b/fluxer_app/src/features/platform/types/Electron.ts index 906430618..530f1b412 100644 --- a/fluxer_app/src/features/platform/types/Electron.ts +++ b/fluxer_app/src/features/platform/types/Electron.ts @@ -99,6 +99,14 @@ export interface ThemeDirectoryCssFile { css: string; } +export type ThemeLinkedFileError = 'not_allowed' | 'missing' | 'not_file' | 'too_large' | 'too_many' | 'read_failed'; + +export interface ThemeLinkedFileChange { + path: string; + css?: string; + error?: ThemeLinkedFileError; +} + export type VoiceBackgroundMediaKind = 'static' | 'animated' | 'video'; export interface VoiceBackgroundMediaCacheRequest { @@ -320,6 +328,9 @@ export interface ElectronAPI { readThemeLocalFiles: (paths: Array) => Promise>; clearThemeLocalFiles: () => Promise; importThemeDirectory: () => Promise>; + pickThemeLinkedFiles: (options?: {multiple?: boolean}) => Promise>; + watchThemeLinkedFiles: (paths: Array) => Promise; + onThemeLinkedFileChange: (callback: (change: ThemeLinkedFileChange) => void) => () => void; cacheVoiceBackgroundMedia: (options: VoiceBackgroundMediaCacheRequest) => Promise; readVoiceBackgroundMedia: (id: string) => Promise; deleteVoiceBackgroundMedia: (id: string) => Promise; diff --git a/fluxer_app/src/features/platform/utils/DesktopLocaleBridge.ts b/fluxer_app/src/features/platform/utils/DesktopLocaleBridge.ts index 5e85b714e..9b7f8b5e9 100644 --- a/fluxer_app/src/features/platform/utils/DesktopLocaleBridge.ts +++ b/fluxer_app/src/features/platform/utils/DesktopLocaleBridge.ts @@ -272,6 +272,19 @@ const IMPORT_FOLDER_DESCRIPTOR = msg({ message: 'Import folder', comment: 'Title of the native folder picker that imports a directory of theme files.', }); +const IMPORT_CSS_DESCRIPTOR = msg({ + message: 'Import CSS', + comment: + 'Title of the native file picker that imports CSS theme files on the desktop app. Imported files stay linked and update live when saved.', +}); +const LINK_FILE_DESCRIPTOR = msg({ + message: 'Link file', + comment: 'Title of the native file picker that links an existing theme to a CSS file on disk.', +}); +const CSS_FILES_DESCRIPTOR = msg({ + message: 'CSS files', + comment: 'Name of the file type filter in the native theme file picker, shown next to the *.css pattern.', +}); const UNREAD_MESSAGES_DESCRIPTOR = msg({ message: 'Unread messages', comment: @@ -384,6 +397,9 @@ const NATIVE_MESSAGES: Record = { 'desktop.notifications.open': OPEN_NOTIFICATION_DESCRIPTOR, 'desktop.themes.addLocalFiles': ADD_LOCAL_FILES_DESCRIPTOR, 'desktop.themes.importFolder': IMPORT_FOLDER_DESCRIPTOR, + 'desktop.themes.importCss': IMPORT_CSS_DESCRIPTOR, + 'desktop.themes.linkFile': LINK_FILE_DESCRIPTOR, + 'desktop.themes.cssFilesFilter': CSS_FILES_DESCRIPTOR, 'desktop.badge.unreadMessages': UNREAD_MESSAGES_DESCRIPTOR, 'desktop.badge.unreadMessagesCount': UNREAD_MESSAGES_COUNT_DESCRIPTOR, 'desktop.startup.failedTitle': FAILED_TO_START_DESCRIPTOR, diff --git a/fluxer_app/src/features/theme/state/ThemeLibrary.ts b/fluxer_app/src/features/theme/state/ThemeLibrary.ts index baa994348..b5803ad06 100644 --- a/fluxer_app/src/features/theme/state/ThemeLibrary.ts +++ b/fluxer_app/src/features/theme/state/ThemeLibrary.ts @@ -22,11 +22,13 @@ import { saveThemeLibraryLocalFile, saveThemeLibraryTheme, setEnabledThemeIds, + updateThemeLibraryThemes, } from '@app/features/theme/utils/ThemeLibraryDb'; import {getElectronAPI} from '@app/features/ui/utils/NativeUtils'; +import type {ThemeLinkedFileError} from '@app/types/electron.d'; import {i18n} from '@lingui/core'; import {msg} from '@lingui/core/macro'; -import {makeAutoObservable, runInAction} from 'mobx'; +import {compareShallow, makeAutoObservable, reaction, runInAction} from 'mobx'; const logger = new Logger('ThemeLibrary'); const DUPLICATE_THEME_NAME_DESCRIPTOR = msg({ @@ -37,6 +39,8 @@ const DUPLICATE_THEME_NAME_DESCRIPTOR = msg({ export type ThemeLibraryThemeSource = 'quick_css' | 'css_file' | 'desktop_directory' | 'shared_theme' | 'import'; +export type ThemeLinkedFileStatus = 'live' | ThemeLinkedFileError; + export interface ThemeLibraryTheme { id: string; name: string; @@ -47,6 +51,7 @@ export interface ThemeLibraryTheme { css: string; fileName: string; source: ThemeLibraryThemeSource; + linkedPath?: string; createdAt: number; updatedAt: number; } @@ -135,10 +140,18 @@ class ThemeLibrary { loadFailed = false; isBusy = false; revision = 0; + linkedFileStatus = new Map(); + focusedThemeId: string | null = null; private initPromise: Promise | null = null; + private linkedFileCss = new Map(); + private linkedThemesChanged: (() => void) | null = null; constructor() { - makeAutoObservable(this, {}, {autoBind: true}); + makeAutoObservable( + this, + {linkedFileCss: false, linkedThemesChanged: false}, + {autoBind: true}, + ); } get enabledThemes(): Array { @@ -153,6 +166,27 @@ class ThemeLibrary { .join('\n\n'); } + get watchedLinkedPaths(): Array { + const paths = new Set(); + for (const theme of this.enabledThemes) { + if (theme.linkedPath) paths.add(theme.linkedPath); + } + const focusedTheme = this.focusedThemeId + ? this.themes.find((theme) => theme.id === this.focusedThemeId) + : undefined; + if (focusedTheme?.linkedPath) paths.add(focusedTheme.linkedPath); + return [...paths].sort(); + } + + get canWatchLinkedFiles(): boolean { + const electronApi = getElectronAPI(); + return Boolean(electronApi?.watchThemeLinkedFiles && electronApi.onThemeLinkedFileChange); + } + + setFocusedThemeId(id: string | null): void { + this.focusedThemeId = id; + } + async init(): Promise { if (this.initPromise) { return this.initPromise; @@ -184,6 +218,7 @@ class ThemeLibrary { this.loadFailed = false; this.revision += 1; }); + this.refreshLinkedThemes(); } catch (error) { logger.error('Failed to hydrate theme library', error); runInAction(() => { @@ -276,25 +311,209 @@ class ThemeLibrary { }); } + async importDesktopCssFiles(): Promise> { + const pickThemeLinkedFiles = getElectronAPI()?.pickThemeLinkedFiles; + if (!pickThemeLinkedFiles) { + return []; + } + return await this.mutate(async () => + this.upsertDesktopCssFiles(await pickThemeLinkedFiles({multiple: true}), 'css_file'), + ); + } + async importDesktopThemeDirectory(): Promise> { const electronApi = getElectronAPI(); const importThemeDirectory = electronApi?.importThemeDirectory; if (!importThemeDirectory) { return []; } - return await this.mutate(async () => { - const files = await importThemeDirectory(); - const imported: Array = []; - for (const file of files) { - const theme = this.createThemeFromCss(file.css, file.fileName, 'desktop_directory'); + return await this.mutate(async () => this.upsertDesktopCssFiles(await importThemeDirectory(), 'desktop_directory')); + } + + private async upsertDesktopCssFiles( + files: ReadonlyArray, + source: ThemeLibraryThemeSource, + ): Promise> { + const link = this.canWatchLinkedFiles; + const imported: Array = []; + for (const file of files) { + const linkedThemes = link ? this.themes.filter((theme) => theme.linkedPath === file.path) : []; + const targets: Array = linkedThemes.length > 0 ? linkedThemes : [undefined]; + for (const existing of targets) { + const theme: ThemeLibraryTheme = { + ...this.createThemeFromCss( + file.css, + file.fileName, + existing?.source ?? source, + existing ? {id: existing.id, createdAt: existing.createdAt} : undefined, + ), + ...(link ? {linkedPath: file.path} : {}), + }; await saveThemeLibraryTheme(theme); imported.push(theme); } - runInAction(() => { - this.themes.push(...imported); - this.themes.sort((a, b) => themeSortValue(a).localeCompare(themeSortValue(b))); + } + runInAction(() => { + for (const theme of imported) { + const existingIndex = this.themes.findIndex((item) => item.id === theme.id); + if (existingIndex >= 0) { + this.themes.splice(existingIndex, 1, theme); + } else { + this.themes.push(theme); + } + } + this.themes.sort((a, b) => themeSortValue(a).localeCompare(themeSortValue(b))); + }); + return imported; + } + + async linkThemeToDesktopFile(id: string): Promise { + const pickThemeLinkedFiles = getElectronAPI()?.pickThemeLinkedFiles; + if (!pickThemeLinkedFiles) { + return null; + } + const [file] = await pickThemeLinkedFiles({multiple: false}); + const existing = this.themes.find((theme) => theme.id === id); + if (!file || !existing) { + return null; + } + const linkedTheme = this.themes.find((theme) => theme.id !== id && theme.linkedPath === file.path); + if (linkedTheme) { + return linkedTheme; + } + const theme: ThemeLibraryTheme = { + ...this.createThemeFromCss(file.css, file.fileName, existing.source, {id, createdAt: existing.createdAt}), + linkedPath: file.path, + }; + await this.saveTheme(theme); + return theme; + } + + async unlinkTheme(id: string): Promise { + await this.mutate(async () => { + const result = await updateThemeLibraryThemes( + (theme) => theme.id === id && theme.linkedPath !== undefined, + (theme) => ({...theme, linkedPath: undefined, updatedAt: now()}), + ); + this.replaceStoredThemes(result.themes); + }); + } + + startLinkedFileSync(options?: {onThemesChanged?: () => void}): () => void { + const electronApi = getElectronAPI(); + const watchThemeLinkedFiles = electronApi?.watchThemeLinkedFiles; + const onThemeLinkedFileChange = electronApi?.onThemeLinkedFileChange; + if (!watchThemeLinkedFiles || !onThemeLinkedFileChange) { + return () => {}; + } + this.linkedThemesChanged = options?.onThemesChanged ?? null; + const watch = (paths: Array): void => { + void watchThemeLinkedFiles(paths).catch((error) => { + logger.warn('Failed to update linked theme file watch', error); + runInAction(() => { + const watched = new Set(this.watchedLinkedPaths); + for (const path of paths) { + if (watched.has(path)) this.linkedFileStatus.set(path, 'read_failed'); + } + }); }); - return imported; + }; + const unsubscribe = onThemeLinkedFileChange((change) => { + if (!this.watchedLinkedPaths.includes(change.path)) return; + runInAction(() => { + this.linkedFileStatus.set(change.path, change.css === undefined ? (change.error ?? 'read_failed') : 'live'); + }); + if (change.css === undefined) return; + this.linkedFileCss.set(change.path, change.css); + this.syncLinkedFileCss(change.path); + }); + const disposeReaction = reaction( + () => this.watchedLinkedPaths, + (paths) => { + const watched = new Set(paths); + for (const path of [...this.linkedFileStatus.keys()]) { + if (!watched.has(path)) this.linkedFileStatus.delete(path); + } + for (const path of [...this.linkedFileCss.keys()]) { + if (!watched.has(path)) this.linkedFileCss.delete(path); + } + watch(paths); + }, + {equals: compareShallow, fireImmediately: true}, + ); + return () => { + disposeReaction(); + unsubscribe(); + this.linkedFileCss.clear(); + this.linkedThemesChanged = null; + watch([]); + }; + } + + private syncLinkedFileCss(path: string): void { + void this.applyLinkedFileCss(path).then( + (written) => { + if (written) this.linkedThemesChanged?.(); + }, + (error) => logger.warn('Failed to apply linked theme file', error), + ); + } + + private async applyLinkedFileCss(path: string): Promise { + const result = await updateThemeLibraryThemes( + (theme) => theme.linkedPath === path, + (theme) => { + const css = this.linkedFileCss.get(path); + if (css === undefined || theme.css === css) return null; + const metadata = parseThemeMetadata(css, theme.name); + return { + ...theme, + name: metadata.name, + description: metadata.description, + author: metadata.author, + version: metadata.version, + tags: metadata.tags, + css, + updatedAt: now(), + }; + }, + ); + this.replaceStoredThemes(result.themes); + return result.written; + } + + private refreshLinkedThemes(): void { + const paths = new Set(this.linkedFileCss.keys()); + if (paths.size === 0) return; + void updateThemeLibraryThemes( + (theme) => theme.linkedPath !== undefined && paths.has(theme.linkedPath), + () => null, + ).then( + (result) => this.replaceStoredThemes(result.themes), + (error) => logger.warn('Failed to refresh linked themes', error), + ); + } + + private replaceStoredThemes(themes: ReadonlyArray): void { + runInAction(() => { + let changed = false; + for (const theme of themes) { + const existingIndex = this.themes.findIndex((item) => item.id === theme.id); + if (existingIndex < 0) continue; + const existing = this.themes[existingIndex]; + if ( + existing.updatedAt === theme.updatedAt && + existing.css === theme.css && + existing.linkedPath === theme.linkedPath + ) { + continue; + } + this.themes.splice(existingIndex, 1, theme); + changed = true; + } + if (!changed) return; + this.themes.sort((a, b) => themeSortValue(a).localeCompare(themeSortValue(b))); + this.revision += 1; }); } @@ -321,6 +540,7 @@ class ThemeLibrary { name: i18n._(DUPLICATE_THEME_NAME_DESCRIPTOR, {themeName: existing.name}), fileName: sanitizeFileName(existing.fileName.replace(/\.css$/i, '-copy.css')), source: 'import', + linkedPath: undefined, createdAt: now(), updatedAt: now(), }; diff --git a/fluxer_app/src/features/theme/utils/ThemeLibraryDb.ts b/fluxer_app/src/features/theme/utils/ThemeLibraryDb.ts index 8176cce19..73a92c7cc 100644 --- a/fluxer_app/src/features/theme/utils/ThemeLibraryDb.ts +++ b/fluxer_app/src/features/theme/utils/ThemeLibraryDb.ts @@ -43,6 +43,7 @@ function isThemeLibraryTheme(value: unknown): value is ThemeLibraryTheme { typeof value.fileName === 'string' && typeof value.source === 'string' && THEME_SOURCES.has(value.source) && + (value.linkedPath === undefined || typeof value.linkedPath === 'string') && typeof value.createdAt === 'number' && typeof value.updatedAt === 'number' ); @@ -168,6 +169,31 @@ export async function saveThemeLibraryTheme(theme: ThemeLibraryTheme): Promise boolean, + update: (theme: ThemeLibraryTheme) => ThemeLibraryTheme | null, +): Promise<{themes: Array; written: boolean}> { + return await withReadwriteDb(THEMES_STORE, (store) => { + const result: {themes: Array; written: boolean} = {themes: [], written: false}; + const request = store.openCursor(); + request.onsuccess = () => { + const cursor = request.result; + if (!cursor) return; + const stored: unknown = cursor.value; + if (isThemeLibraryTheme(stored) && select(stored)) { + const next = update(stored); + if (next) { + cursor.update(next); + result.written = true; + } + result.themes.push(next ?? stored); + } + cursor.continue(); + }; + return result; + }); +} + export async function deleteThemeLibraryTheme(id: string): Promise { await withReadwriteDb(THEMES_STORE, (store) => { store.delete(id); diff --git a/fluxer_app/src/features/theme_studio/ThemeStudioStandaloneApp.tsx b/fluxer_app/src/features/theme_studio/ThemeStudioStandaloneApp.tsx index 2d97c67c0..445eba788 100644 --- a/fluxer_app/src/features/theme_studio/ThemeStudioStandaloneApp.tsx +++ b/fluxer_app/src/features/theme_studio/ThemeStudioStandaloneApp.tsx @@ -7,6 +7,8 @@ import {useNativePlatform} from '@app/features/app/hooks/useNativePlatform'; import {usePlatformClasses} from '@app/features/app/hooks/usePlatformClasses'; import {Logger} from '@app/features/platform/utils/AppLogger'; import Theme from '@app/features/theme/state/Theme'; +import ThemeLibrary from '@app/features/theme/state/ThemeLibrary'; +import {broadcastThemeStudioMessage} from '@app/features/theme_studio/state/ThemeStudioBroadcast'; import {THEME_STUDIO_DESCRIPTOR, ThemeStudio} from '@app/features/theme_studio/ThemeStudio'; import styles from '@app/features/theme_studio/ThemeStudio.module.css'; import { @@ -59,6 +61,13 @@ export const ThemeStudioStandaloneApp: React.FC = observer(() => { html.classList.remove(`theme-${effectiveTheme}`); }; }, [effectiveTheme]); + useEffect( + () => + ThemeLibrary.startLinkedFileSync({ + onThemesChanged: () => broadcastThemeStudioMessage({type: 'themeLibrary', revision: ThemeLibrary.revision}), + }), + [], + ); useEffect(() => { setStandaloneDefaultVariables(readThemeStudioComputedDefaultVariables(fallbackDefaultVariables)); }, [fallbackDefaultVariables, effectiveTheme]); diff --git a/fluxer_app/src/features/theme_studio/sections/LibrarySection.module.css b/fluxer_app/src/features/theme_studio/sections/LibrarySection.module.css index 2331c92d7..fe185faab 100644 --- a/fluxer_app/src/features/theme_studio/sections/LibrarySection.module.css +++ b/fluxer_app/src/features/theme_studio/sections/LibrarySection.module.css @@ -265,3 +265,35 @@ align-items: center; padding-right: 0.625rem; } + +.listItemStatus { + display: inline-flex; + margin-right: 0.25rem; + vertical-align: -0.0625rem; + color: var(--studio-success); +} + +.listItemStatusWarning { + color: var(--studio-warning); +} + +.linkedBanner { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 0.875rem; + border-bottom: 0.0625rem solid var(--studio-border); + font-size: var(--studio-fs-xs); + color: var(--studio-fg-muted); +} + +.linkedBannerWarning { + background: var(--studio-warning-soft); + color: var(--studio-fg-primary); +} + +.linkedBannerText { + flex: 1; + min-width: 0; + overflow-wrap: anywhere; +} diff --git a/fluxer_app/src/features/theme_studio/sections/LibrarySection.tsx b/fluxer_app/src/features/theme_studio/sections/LibrarySection.tsx index 6fb93bd28..e08999903 100644 --- a/fluxer_app/src/features/theme_studio/sections/LibrarySection.tsx +++ b/fluxer_app/src/features/theme_studio/sections/LibrarySection.tsx @@ -36,8 +36,11 @@ import { FilePlusIcon, FloppyDiskIcon, FolderOpenIcon, + LinkBreakIcon, + LinkSimpleIcon, TrashIcon, UploadSimpleIcon, + WarningCircleIcon, } from '@phosphor-icons/react'; import {clsx} from 'clsx'; import {observer} from 'mobx-react-lite'; @@ -134,6 +137,42 @@ const PICK_A_THEME_ON_THE_LEFT_TO_EDIT_DESCRIPTOR = msg({ message: 'Pick a theme on the left to edit its name, metadata, and CSS. Or import a new one.', comment: 'Description text in the theme studio library section.', }); +const LINKED_THEME_FILES_DESCRIPTOR = msg({ + message: + 'Linked {length, plural, one {# theme file} other {# theme files}}. Changes you save to them apply right away.', + comment: + 'Toast after importing CSS files or a folder on the desktop app. The themes stay linked to the files on disk and update when the file is saved.', +}); +const LINKED_FILE_DESCRIPTOR = msg({ + message: 'Linked to a file', + comment: + 'Accessible label for the icon next to a theme in the Theme Studio library that is linked to a CSS file on disk and updates live.', +}); +const LINKED_FILE_UNAVAILABLE_DESCRIPTOR = msg({ + message: 'Linked file unavailable', + comment: + 'Accessible label for the warning icon next to a linked theme in the Theme Studio library when its CSS file is missing or cannot be read.', +}); +const LINKED_FILE_LIVE_DESCRIPTOR = msg({ + message: 'Linked to {path}. Edit the file in any editor and saved changes apply here right away.', + comment: + 'Banner above a linked theme in the Theme Studio library. {path} is the full path of the CSS file on disk. The theme cannot be edited in the studio while linked.', +}); +const LINKED_FILE_PATH_DESCRIPTOR = msg({ + message: 'Linked to {path}.', + comment: + 'Banner above a linked theme in the Theme Studio library while the app is still checking its CSS file, or when this version of the desktop app cannot follow file changes. {path} is the full path of the CSS file on disk.', +}); +const LINKED_FILE_MISSING_DESCRIPTOR = msg({ + message: "Can't find {path}. Using the last loaded version.", + comment: + 'Banner above a linked theme in the Theme Studio library when its CSS file was moved or deleted. {path} is the full path of the CSS file.', +}); +const LINKED_FILE_UNREADABLE_DESCRIPTOR = msg({ + message: "Can't read {path}. Using the last loaded version.", + comment: + 'Banner above a linked theme in the Theme Studio library when its CSS file exists but cannot be read, for example because it is too large or access was removed. {path} is the full path of the CSS file.', +}); function LibraryCssEditorLoading() { return ( @@ -183,6 +222,15 @@ export const LibrarySection: React.FC = observer(({baseThem }); }, [searchQuery, themeLibraryRevision]); const selectedTheme = ThemeLibrary.themes.find((theme) => theme.id === selectedThemeId) ?? null; + useEffect(() => { + ThemeLibrary.setFocusedThemeId(selectedThemeId); + }, [selectedThemeId]); + useEffect( + () => () => { + ThemeLibrary.setFocusedThemeId(null); + }, + [], + ); useEffect(() => { if (selectedThemeId && ThemeLibrary.themes.some((theme) => theme.id === selectedThemeId)) return; setSelectedThemeId(ThemeLibrary.themes[0]?.id ?? null); @@ -217,7 +265,7 @@ export const LibrarySection: React.FC = observer(({baseThem }, [selectedTheme, draftName, draftDescription, draftAuthor, draftVersion, draftTags, draftCss]); const handleSelect = useCallback((id: string) => setSelectedThemeId(id), []); const handleSave = useCallback(() => { - if (!selectedTheme) return; + if (!selectedTheme || (selectedTheme.linkedPath && ThemeLibrary.canWatchLinkedFiles)) return; const metadata = { name: draftName.trim() || selectedTheme.name, description: draftDescription, @@ -278,14 +326,42 @@ export const LibrarySection: React.FC = observer(({baseThem }, [i18n], ); + const handleImportDesktopCss = useCallback(() => { + void ThemeLibrary.importDesktopCssFiles().then((themes) => { + if (themes.length > 0) { + broadcastThemeStudioMessage({type: 'themeLibrary', revision: ThemeLibrary.revision}); + ToastCommands.success(i18n._(LINKED_THEME_FILES_DESCRIPTOR, {length: themes.length})); + } + }); + }, [i18n]); const handleImportDirectory = useCallback(() => { void ThemeLibrary.importDesktopThemeDirectory().then((themes) => { if (themes.length > 0) { broadcastThemeStudioMessage({type: 'themeLibrary', revision: ThemeLibrary.revision}); - ToastCommands.success(i18n._(IMPORTED_OTHER_2_DESCRIPTOR, {length: themes.length})); + const descriptor = themes.some((theme) => theme.linkedPath) + ? LINKED_THEME_FILES_DESCRIPTOR + : IMPORTED_OTHER_2_DESCRIPTOR; + ToastCommands.success(i18n._(descriptor, {length: themes.length})); } }); }, [i18n]); + const handleLinkFile = useCallback(() => { + if (!selectedTheme) return; + void ThemeLibrary.linkThemeToDesktopFile(selectedTheme.id).then((theme) => { + if (!theme) return; + if (theme.id !== selectedTheme.id) { + setSelectedThemeId(theme.id); + return; + } + broadcastThemeStudioMessage({type: 'themeLibrary', revision: ThemeLibrary.revision}); + }); + }, [selectedTheme]); + const handleUnlink = useCallback(() => { + if (!selectedTheme) return; + void ThemeLibrary.unlinkTheme(selectedTheme.id).then(() => { + broadcastThemeStudioMessage({type: 'themeLibrary', revision: ThemeLibrary.revision}); + }); + }, [selectedTheme]); const handleImportLibrary = useCallback( (event: React.ChangeEvent) => { const file = event.target.files?.[0]; @@ -315,6 +391,13 @@ export const LibrarySection: React.FC = observer(({baseThem }); }, []); const hasDesktopFileAccess = isDesktop() && Boolean(getElectronAPI()?.pickThemeLocalFiles); + const canLinkFiles = isDesktop() && Boolean(getElectronAPI()?.pickThemeLinkedFiles); + const selectedLinkedPath = selectedTheme?.linkedPath; + const isSelectedLinked = Boolean(selectedLinkedPath) && ThemeLibrary.canWatchLinkedFiles; + const selectedLinkedStatus = + selectedLinkedPath && isSelectedLinked ? ThemeLibrary.linkedFileStatus.get(selectedLinkedPath) : undefined; + const selectedLinkedProblem = selectedLinkedStatus !== undefined && selectedLinkedStatus !== 'live'; + const LinkedBannerIcon = selectedLinkedProblem ? WarningCircleIcon : LinkSimpleIcon; return (
@@ -331,7 +414,7 @@ export const LibrarySection: React.FC = observer(({baseThem variant="secondary" compact leadingIcon={} - onClick={() => cssImportRef.current?.click()} + onClick={canLinkFiles ? handleImportDesktopCss : () => cssImportRef.current?.click()} data-flx="theme-studio.library-section.studio-button.click" > Import CSS @@ -427,6 +510,8 @@ export const LibrarySection: React.FC = observer(({baseThem ) : ( filteredThemes.map((theme) => { const enabled = ThemeLibrary.enabledThemeIds.includes(theme.id); + const linkedStatus = theme.linkedPath ? ThemeLibrary.linkedFileStatus.get(theme.linkedPath) : undefined; + const linkedProblem = linkedStatus !== undefined && linkedStatus !== 'live'; return (
= observer(({baseThem {theme.name || theme.fileName} - {theme.fileName} + {theme.linkedPath ? ( + + {linkedProblem ? ( + + ) : ( + + )} + + ) : null} + {theme.fileName} @@ -478,6 +589,26 @@ export const LibrarySection: React.FC = observer(({baseThem {selectedTheme.name || selectedTheme.fileName}
+ {canLinkFiles && !selectedLinkedPath ? ( + + } + disabled={hasDirty} + onClick={handleLinkFile} + data-flx="theme-studio.library-section.studio-button.link-file" + > + + Link file + + + ) : null} = observer(({baseThem
+ {selectedLinkedPath ? ( +
+ + + {i18n._( + selectedLinkedStatus === 'missing' + ? LINKED_FILE_MISSING_DESCRIPTOR + : selectedLinkedProblem + ? LINKED_FILE_UNREADABLE_DESCRIPTOR + : selectedLinkedStatus === 'live' + ? LINKED_FILE_LIVE_DESCRIPTOR + : LINKED_FILE_PATH_DESCRIPTOR, + {path: selectedLinkedPath}, + )} + + + } + onClick={handleUnlink} + data-flx="theme-studio.library-section.studio-button.unlink" + > + + Unlink + + +
+ ) : null}
= observer(({baseThem value={draftTags} onChange={setDraftTags} placeholder={i18n._(COMMA_SEPARATED_DESCRIPTOR)} + readOnly={isSelectedLinked} data-flx="theme-studio.library-section.library-field.set-draft-tags" /> = observer(({baseThem value={draftDescription} onChange={setDraftDescription} fullWidth + readOnly={isSelectedLinked} data-flx="theme-studio.library-section.library-field.set-draft-description" />
@@ -557,28 +731,35 @@ export const LibrarySection: React.FC = observer(({baseThem className={styles.cssEditor} value={draftCss} onChange={setDraftCss} + readOnly={isSelectedLinked} data-flx="theme-studio.library-section.library-css-editor.set-draft-css" />
-
- - } - disabled={!hasDirty} - onClick={handleSave} - data-flx="theme-studio.library-section.studio-button.save" - > - Save theme - - {hasDirty ? ( - - Unsaved changes - - ) : null} -
+ {isSelectedLinked ? null : ( +
+ + } + disabled={!hasDirty} + onClick={handleSave} + data-flx="theme-studio.library-section.studio-button.save" + > + Save theme + + {hasDirty ? ( + + Unsaved changes + + ) : null} +
+ )} ) : (
@@ -605,9 +786,10 @@ interface LibraryFieldProps { onChange: (value: string) => void; placeholder?: string; fullWidth?: boolean; + readOnly?: boolean; } -const LibraryField: React.FC = ({label, value, onChange, placeholder, fullWidth}) => { +const LibraryField: React.FC = ({label, value, onChange, placeholder, fullWidth, readOnly}) => { const inputId = useId(); return (
= ({label, value, onChange, plac className={styles.fieldInput} value={value} placeholder={placeholder} + readOnly={readOnly} onChange={(event) => onChange(event.target.value)} data-flx="theme-studio.library-section.library-field.field-input.change.text" /> diff --git a/fluxer_app/src/features/theme_studio/sections/QuickCssEditor.tsx b/fluxer_app/src/features/theme_studio/sections/QuickCssEditor.tsx index 50dfdc2a1..c72f94813 100644 --- a/fluxer_app/src/features/theme_studio/sections/QuickCssEditor.tsx +++ b/fluxer_app/src/features/theme_studio/sections/QuickCssEditor.tsx @@ -127,81 +127,96 @@ export interface QuickCssEditorProps { baseTheme: ThemeStudioBaseTheme; className?: string; onChange: (value: string) => void; + readOnly?: boolean; value: string; } -const QuickCssEditor: React.FC = observer(({ariaLabel, baseTheme, className, onChange, value}) => { - const containerRef = useRef(null); - const viewRef = useRef(null); - const onChangeRef = useRef(onChange); - onChangeRef.current = onChange; - const useSmoothScrolling = Accessibility.useSmoothScrolling; +const QuickCssEditor: React.FC = observer( + ({ariaLabel, baseTheme, className, onChange, readOnly, value}) => { + const containerRef = useRef(null); + const viewRef = useRef(null); + const onChangeRef = useRef(onChange); + onChangeRef.current = onChange; + const useSmoothScrolling = Accessibility.useSmoothScrolling; - const themeCompartment = useMemo(() => new Compartment(), []); - const contentAttributesCompartment = useMemo(() => new Compartment(), []); - const initialDocumentRef = useRef(value); - const initialAriaLabelRef = useRef(ariaLabel); - const initialBaseThemeRef = useRef(baseTheme); + const themeCompartment = useMemo(() => new Compartment(), []); + const contentAttributesCompartment = useMemo(() => new Compartment(), []); + const readOnlyCompartment = useMemo(() => new Compartment(), []); + const initialDocumentRef = useRef(value); + const initialReadOnlyRef = useRef(Boolean(readOnly)); + const initialAriaLabelRef = useRef(ariaLabel); + const initialBaseThemeRef = useRef(baseTheme); - useEffect(() => { - const parent = containerRef.current; - if (!parent) return; - const state = EditorState.create({ - doc: initialDocumentRef.current, - extensions: [ - Prec.highest(keymap.of([indentWithTab])), - basicSetup, - css(), - cssLanguage.data.of({autocomplete: themeTokenCompletionSource}), - EditorView.lineWrapping, - contentAttributesCompartment.of(EditorView.contentAttributes.of({'aria-label': initialAriaLabelRef.current})), - themeCompartment.of([buildEditorTheme(initialBaseThemeRef.current), syntaxHighlighting(buildHighlightStyle())]), - EditorView.updateListener.of((update) => { - if (update.docChanged) { - onChangeRef.current(update.state.doc.toString()); - } - }), - ], - }); - const view = new EditorView({state, parent}); - viewRef.current = view; - return () => { - view.destroy(); - viewRef.current = null; - }; - }, [contentAttributesCompartment, themeCompartment]); + useEffect(() => { + const parent = containerRef.current; + if (!parent) return; + const state = EditorState.create({ + doc: initialDocumentRef.current, + extensions: [ + Prec.highest(keymap.of([indentWithTab])), + basicSetup, + css(), + cssLanguage.data.of({autocomplete: themeTokenCompletionSource}), + EditorView.lineWrapping, + contentAttributesCompartment.of(EditorView.contentAttributes.of({'aria-label': initialAriaLabelRef.current})), + readOnlyCompartment.of(EditorState.readOnly.of(initialReadOnlyRef.current)), + themeCompartment.of([ + buildEditorTheme(initialBaseThemeRef.current), + syntaxHighlighting(buildHighlightStyle()), + ]), + EditorView.updateListener.of((update) => { + if (update.docChanged) { + onChangeRef.current(update.state.doc.toString()); + } + }), + ], + }); + const view = new EditorView({state, parent}); + viewRef.current = view; + return () => { + view.destroy(); + viewRef.current = null; + }; + }, [contentAttributesCompartment, readOnlyCompartment, themeCompartment]); - useEffect(() => { - const view = viewRef.current; - if (!view) return; - view.dispatch({ - effects: themeCompartment.reconfigure([buildEditorTheme(baseTheme), syntaxHighlighting(buildHighlightStyle())]), - }); - }, [baseTheme, themeCompartment]); + useEffect(() => { + const view = viewRef.current; + if (!view) return; + view.dispatch({ + effects: themeCompartment.reconfigure([buildEditorTheme(baseTheme), syntaxHighlighting(buildHighlightStyle())]), + }); + }, [baseTheme, themeCompartment]); - useEffect(() => { - const view = viewRef.current; - if (!view) return; - view.dispatch({ - effects: contentAttributesCompartment.reconfigure(EditorView.contentAttributes.of({'aria-label': ariaLabel})), - }); - }, [ariaLabel, contentAttributesCompartment]); + useEffect(() => { + const view = viewRef.current; + if (!view) return; + view.dispatch({ + effects: contentAttributesCompartment.reconfigure(EditorView.contentAttributes.of({'aria-label': ariaLabel})), + }); + }, [ariaLabel, contentAttributesCompartment]); - useEffect(() => { - const view = viewRef.current; - if (!view) return; - const current = view.state.doc.toString(); - if (current === value) return; - view.dispatch({changes: {from: 0, to: current.length, insert: value}}); - }, [value]); + useEffect(() => { + const view = viewRef.current; + if (!view) return; + view.dispatch({effects: readOnlyCompartment.reconfigure(EditorState.readOnly.of(Boolean(readOnly)))}); + }, [readOnly, readOnlyCompartment]); - useEffect(() => { - const view = viewRef.current; - if (!view) return; - view.scrollDOM.style.scrollBehavior = useSmoothScrolling ? 'smooth' : 'auto'; - }, [useSmoothScrolling]); + useEffect(() => { + const view = viewRef.current; + if (!view) return; + const current = view.state.doc.toString(); + if (current === value) return; + view.dispatch({changes: {from: 0, to: current.length, insert: value}}); + }, [value]); - return
; -}); + useEffect(() => { + const view = viewRef.current; + if (!view) return; + view.scrollDOM.style.scrollBehavior = useSmoothScrolling ? 'smooth' : 'auto'; + }, [useSmoothScrolling]); + + return
; + }, +); export default QuickCssEditor; diff --git a/fluxer_app/src/types/electron.d.ts b/fluxer_app/src/types/electron.d.ts index 714c29dc7..dbf00dd77 100644 --- a/fluxer_app/src/types/electron.d.ts +++ b/fluxer_app/src/types/electron.d.ts @@ -108,6 +108,14 @@ export interface ThemeDirectoryCssFile { css: string; } +export type ThemeLinkedFileError = 'not_allowed' | 'missing' | 'not_file' | 'too_large' | 'too_many' | 'read_failed'; + +export interface ThemeLinkedFileChange { + path: string; + css?: string; + error?: ThemeLinkedFileError; +} + export type VoiceBackgroundMediaKind = 'static' | 'animated' | 'video'; export interface VoiceBackgroundMediaCacheRequest { @@ -370,6 +378,9 @@ export interface ElectronAPI { readThemeLocalFiles?(paths: Array): Promise>; clearThemeLocalFiles?(): Promise; importThemeDirectory?(): Promise>; + pickThemeLinkedFiles?(options?: {multiple?: boolean}): Promise>; + watchThemeLinkedFiles?(paths: Array): Promise; + onThemeLinkedFileChange?(callback: (change: ThemeLinkedFileChange) => void): () => void; cacheVoiceBackgroundMedia?(options: VoiceBackgroundMediaCacheRequest): Promise; readVoiceBackgroundMedia?(id: string): Promise; deleteVoiceBackgroundMedia?(id: string): Promise; diff --git a/fluxer_desktop/src/common/Types.ts b/fluxer_desktop/src/common/Types.ts index 41ddabf35..03b14faac 100644 --- a/fluxer_desktop/src/common/Types.ts +++ b/fluxer_desktop/src/common/Types.ts @@ -135,6 +135,14 @@ export interface ThemeDirectoryCssFile { css: string; } +export type ThemeLinkedFileError = 'not_allowed' | 'missing' | 'not_file' | 'too_large' | 'too_many' | 'read_failed'; + +export interface ThemeLinkedFileChange { + path: string; + css?: string; + error?: ThemeLinkedFileError; +} + export type VoiceBackgroundMediaKind = 'static' | 'animated' | 'video'; export interface VoiceBackgroundMediaCacheRequest { @@ -648,6 +656,9 @@ export interface ElectronAPI { readThemeLocalFiles: (paths: Array) => Promise>; clearThemeLocalFiles: () => Promise; importThemeDirectory: () => Promise>; + pickThemeLinkedFiles: (options?: {multiple?: boolean}) => Promise>; + watchThemeLinkedFiles: (paths: Array) => Promise; + onThemeLinkedFileChange: (callback: (change: ThemeLinkedFileChange) => void) => () => void; cacheVoiceBackgroundMedia: (options: VoiceBackgroundMediaCacheRequest) => Promise; readVoiceBackgroundMedia: (id: string) => Promise; deleteVoiceBackgroundMedia: (id: string) => Promise; diff --git a/fluxer_desktop/src/main/MainI18n.ts b/fluxer_desktop/src/main/MainI18n.ts index 642d81a81..10e5fa77f 100644 --- a/fluxer_desktop/src/main/MainI18n.ts +++ b/fluxer_desktop/src/main/MainI18n.ts @@ -82,6 +82,9 @@ const FALLBACK_STRINGS: Readonly> = Object.freeze({ 'desktop.notifications.open': 'Open', 'desktop.themes.addLocalFiles': 'Add local files', 'desktop.themes.importFolder': 'Import folder', + 'desktop.themes.importCss': 'Import CSS', + 'desktop.themes.linkFile': 'Link file', + 'desktop.themes.cssFilesFilter': 'CSS files', 'desktop.badge.unreadMessages': 'Unread messages', 'desktop.badge.unreadMessagesCount': 'Unread messages: {count}', 'desktop.startup.failedTitle': '{appName} failed to start', diff --git a/fluxer_desktop/src/main/ThemeLinkedFileWatch.test.mjs b/fluxer_desktop/src/main/ThemeLinkedFileWatch.test.mjs new file mode 100644 index 000000000..b57ee49c7 --- /dev/null +++ b/fluxer_desktop/src/main/ThemeLinkedFileWatch.test.mjs @@ -0,0 +1,221 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import {createRequire} from 'node:module'; +import os from 'node:os'; +import path from 'node:path'; +import {after, describe, test} from 'node:test'; +import {fileURLToPath} from 'node:url'; +import vm from 'node:vm'; + +const require = createRequire(import.meta.url); +const esbuild = require('esbuild'); + +const sourcePath = fileURLToPath(new URL('./ThemeLinkedFileWatch.ts', import.meta.url)); +const source = fs.readFileSync(sourcePath, 'utf8'); +const transformedSource = esbuild.transformSync(source, { + loader: 'ts', + format: 'cjs', + platform: 'node', + target: 'node20', +}).code; + +function loadThemeLinkedFileWatch() { + const module = {exports: {}}; + const context = vm.createContext({ + module, + exports: module.exports, + require, + }); + vm.runInContext(transformedSource, context, {filename: sourcePath}); + return module.exports; +} + +const {createThemeLinkedFileWatchSet, readThemeCssFile} = loadThemeLinkedFileWatch(); +const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'fluxer-theme-linked-')); +let fileCounter = 0; + +after(() => { + fs.rmSync(tempRoot, {recursive: true, force: true}); +}); + +function nextFilePath() { + fileCounter += 1; + return path.join(tempRoot, `theme-${fileCounter}.css`); +} + +function createRecorder() { + const changes = []; + const waiters = []; + const emit = (change) => { + changes.push(change); + for (const waiter of [...waiters]) { + if (waiter.predicate(change)) { + waiters.splice(waiters.indexOf(waiter), 1); + clearTimeout(waiter.timer); + waiter.resolve(change); + } + } + }; + const waitFor = (predicate, timeoutMs = 3000) => + new Promise((resolve, reject) => { + const waiter = {predicate, resolve, timer: null}; + waiter.timer = setTimeout(() => { + waiters.splice(waiters.indexOf(waiter), 1); + reject(new Error(`Timed out waiting for change, saw ${JSON.stringify(changes)}`)); + }, timeoutMs); + waiters.push(waiter); + }); + return {changes, emit, waitFor}; +} + +function delay(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +async function writeLater(filePath, contents) { + await delay(40); + fs.writeFileSync(filePath, contents); +} + +describe('ThemeLinkedFileWatch', () => { + test('emits css on the first read', async () => { + const filePath = nextFilePath(); + fs.writeFileSync(filePath, '.a{color:red}'); + const recorder = createRecorder(); + const watchSet = createThemeLinkedFileWatchSet(recorder.emit, 25); + try { + watchSet.replace([filePath]); + const change = await recorder.waitFor((item) => item.path === filePath); + assert.equal(change.css, '.a{color:red}'); + } finally { + watchSet.dispose(); + } + }); + + test('emits new css after an in-place write', async () => { + const filePath = nextFilePath(); + fs.writeFileSync(filePath, '.a{color:red}'); + const recorder = createRecorder(); + const watchSet = createThemeLinkedFileWatchSet(recorder.emit, 25); + try { + watchSet.replace([filePath]); + await recorder.waitFor((item) => item.css === '.a{color:red}'); + await writeLater(filePath, '.a{color:blue;padding:1px}'); + await recorder.waitFor((item) => item.css === '.a{color:blue;padding:1px}'); + } finally { + watchSet.dispose(); + } + }); + + test('emits new css after a temp file and rename save', async () => { + const filePath = nextFilePath(); + fs.writeFileSync(filePath, '.a{color:red}'); + const recorder = createRecorder(); + const watchSet = createThemeLinkedFileWatchSet(recorder.emit, 25); + try { + watchSet.replace([filePath]); + await recorder.waitFor((item) => item.css === '.a{color:red}'); + await delay(40); + const tempPath = `${filePath}.tmp`; + fs.writeFileSync(tempPath, '.a{color:green}'); + fs.renameSync(tempPath, filePath); + await recorder.waitFor((item) => item.css === '.a{color:green}'); + } finally { + watchSet.dispose(); + } + }); + + test('reports missing after unlink and css after the file returns', async () => { + const filePath = nextFilePath(); + fs.writeFileSync(filePath, '.a{color:red}'); + const recorder = createRecorder(); + const watchSet = createThemeLinkedFileWatchSet(recorder.emit, 25); + try { + watchSet.replace([filePath]); + await recorder.waitFor((item) => item.css === '.a{color:red}'); + await delay(40); + fs.unlinkSync(filePath); + await recorder.waitFor((item) => item.error === 'missing'); + await writeLater(filePath, '.a{color:purple}'); + await recorder.waitFor((item) => item.css === '.a{color:purple}'); + } finally { + watchSet.dispose(); + } + }); + + test('strips a leading byte order mark', async () => { + const filePath = nextFilePath(); + fs.writeFileSync(filePath, '.a{color:red}'); + const change = await readThemeCssFile(filePath); + assert.equal(change.css, '.a{color:red}'); + }); + + test('rejects oversize files', async () => { + const filePath = nextFilePath(); + fs.writeFileSync(filePath, 'a'.repeat(1024 * 1024 + 1)); + const change = await readThemeCssFile(filePath); + assert.equal(change.css, undefined); + assert.equal(change.error, 'too_large'); + }); + + test('refuses to follow a symlink', async () => { + const targetPath = nextFilePath(); + const linkPath = nextFilePath(); + fs.writeFileSync(targetPath, 'secret'); + fs.symlinkSync(targetPath, linkPath); + const change = await readThemeCssFile(linkPath); + assert.equal(change.css, undefined); + assert.equal(change.error, 'not_file'); + }); + + test('reports missing for an absent file', async () => { + const change = await readThemeCssFile(nextFilePath()); + assert.equal(change.error, 'missing'); + }); + + test('stops emitting for a path dropped by replace', async () => { + const keptPath = nextFilePath(); + const droppedPath = nextFilePath(); + fs.writeFileSync(keptPath, '.kept{}'); + fs.writeFileSync(droppedPath, '.dropped{}'); + const recorder = createRecorder(); + const watchSet = createThemeLinkedFileWatchSet(recorder.emit, 25); + try { + const initialReads = Promise.all([ + recorder.waitFor((item) => item.path === droppedPath), + recorder.waitFor((item) => item.path === keptPath), + ]); + watchSet.replace([keptPath, droppedPath]); + await initialReads; + watchSet.replace([keptPath]); + await delay(40); + fs.writeFileSync(droppedPath, '.dropped{color:red}'); + fs.writeFileSync(keptPath, '.kept{color:red}'); + await recorder.waitFor((item) => item.css === '.kept{color:red}'); + await delay(150); + assert.equal( + recorder.changes.some((item) => item.css === '.dropped{color:red}'), + false, + ); + } finally { + watchSet.dispose(); + } + }); + + test('dispose stops every event', async () => { + const filePath = nextFilePath(); + fs.writeFileSync(filePath, '.a{color:red}'); + const recorder = createRecorder(); + const watchSet = createThemeLinkedFileWatchSet(recorder.emit, 25); + watchSet.replace([filePath]); + await recorder.waitFor((item) => item.css === '.a{color:red}'); + watchSet.dispose(); + const count = recorder.changes.length; + await delay(40); + fs.writeFileSync(filePath, '.a{color:blue}'); + await delay(200); + assert.equal(recorder.changes.length, count); + }); +}); diff --git a/fluxer_desktop/src/main/ThemeLinkedFileWatch.ts b/fluxer_desktop/src/main/ThemeLinkedFileWatch.ts new file mode 100644 index 000000000..216d1b4a2 --- /dev/null +++ b/fluxer_desktop/src/main/ThemeLinkedFileWatch.ts @@ -0,0 +1,94 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {Buffer} from 'node:buffer'; +import fs from 'node:fs'; +import type {ThemeLinkedFileChange} from '@electron/common/Types'; + +const THEME_CSS_MAX_BYTES = 1024 * 1024; + +interface ThemeLinkedFileWatchEntry { + listener: () => void; + generation: number; +} + +export async function readThemeCssFile(filePath: string): Promise { + let handle: fs.promises.FileHandle | null = null; + try { + const linkStats = await fs.promises.lstat(filePath); + if (!linkStats.isFile()) { + return {path: filePath, error: 'not_file'}; + } + handle = await fs.promises.open(filePath, fs.constants.O_RDONLY | (fs.constants.O_NOFOLLOW ?? 0)); + const stats = await handle.stat(); + if (!stats.isFile()) { + return {path: filePath, error: 'not_file'}; + } + if (stats.size > THEME_CSS_MAX_BYTES) { + return {path: filePath, error: 'too_large'}; + } + const buffer = Buffer.alloc(THEME_CSS_MAX_BYTES + 1); + let bytesRead = 0; + while (bytesRead < buffer.length) { + const result = await handle.read(buffer, bytesRead, buffer.length - bytesRead, bytesRead); + if (result.bytesRead === 0) break; + bytesRead += result.bytesRead; + } + if (bytesRead > THEME_CSS_MAX_BYTES) { + return {path: filePath, error: 'too_large'}; + } + return {path: filePath, css: buffer.toString('utf8', 0, bytesRead).replace(/^\uFEFF/, '')}; + } catch (error) { + const code = (error as NodeJS.ErrnoException | null)?.code; + if (code === 'ENOENT') { + return {path: filePath, error: 'missing'}; + } + if (code === 'ELOOP') { + return {path: filePath, error: 'not_file'}; + } + return {path: filePath, error: 'read_failed'}; + } finally { + await handle?.close().catch(() => {}); + } +} + +export function createThemeLinkedFileWatchSet( + emit: (change: ThemeLinkedFileChange) => void, + intervalMs = 250, +): {replace: (paths: ReadonlyArray) => void; dispose: () => void} { + const entries = new Map(); + const read = (filePath: string): void => { + const entry = entries.get(filePath); + if (!entry) return; + entry.generation += 1; + const generation = entry.generation; + void readThemeCssFile(filePath).then((change) => { + const current = entries.get(filePath); + if (current !== entry || current.generation !== generation) return; + emit(change); + }); + }; + const unwatch = (filePath: string): void => { + const entry = entries.get(filePath); + if (!entry) return; + fs.unwatchFile(filePath, entry.listener); + entries.delete(filePath); + }; + return { + replace(paths) { + const next = new Set(paths); + for (const filePath of [...entries.keys()]) { + if (!next.has(filePath)) unwatch(filePath); + } + for (const filePath of next) { + if (entries.has(filePath)) continue; + const entry: ThemeLinkedFileWatchEntry = {listener: () => read(filePath), generation: 0}; + entries.set(filePath, entry); + fs.watchFile(filePath, {interval: intervalMs, persistent: false}, entry.listener); + read(filePath); + } + }, + dispose() { + for (const filePath of [...entries.keys()]) unwatch(filePath); + }, + }; +} diff --git a/fluxer_desktop/src/main/ThemeLocalFiles.ts b/fluxer_desktop/src/main/ThemeLocalFiles.ts index 722c32a24..a0067d432 100644 --- a/fluxer_desktop/src/main/ThemeLocalFiles.ts +++ b/fluxer_desktop/src/main/ThemeLocalFiles.ts @@ -8,14 +8,62 @@ import { getAllowedThemeLocalFiles, } from '@electron/common/DesktopConfig'; import {createChildLogger} from '@electron/common/Logger'; -import type {ThemeDirectoryCssFile, ThemeLocalFileReadResult, ThemeLocalFileReference} from '@electron/common/Types'; +import type { + ThemeDirectoryCssFile, + ThemeLinkedFileChange, + ThemeLocalFileReadResult, + ThemeLocalFileReference, +} from '@electron/common/Types'; import {t} from '@electron/main/MainI18n'; -import {BrowserWindow, dialog, ipcMain} from 'electron'; +import {requirePrivilegedRendererDocumentSender} from '@electron/main/PrivilegedRendererDocuments'; +import {createThemeLinkedFileWatchSet, readThemeCssFile} from '@electron/main/ThemeLinkedFileWatch'; +import {BrowserWindow, dialog, ipcMain, type WebContents} from 'electron'; const logger = createChildLogger('ThemeLocalFiles'); const THEME_LOCAL_FILE_MAX_BYTES = 50 * 1024 * 1024; -const THEME_DIRECTORY_CSS_MAX_BYTES = 1024 * 1024; const THEME_DIRECTORY_MAX_CSS_FILES = 200; +const THEME_LINKED_FILES_MAX_WATCHED = 500; + +interface ThemeLinkedFileWatchSubscription { + watchSet: ReturnType; + emit: (change: ThemeLinkedFileChange) => void; + dispose: () => void; +} + +const linkedFileWatchSets = new Map(); + +function isRecord(value: unknown): value is Record { + return value !== null && typeof value === 'object'; +} + +function getLinkedFileWatchSubscription(sender: WebContents): ThemeLinkedFileWatchSubscription { + const existing = linkedFileWatchSets.get(sender.id); + if (existing) return existing; + const senderId = sender.id; + const emit = (change: ThemeLinkedFileChange): void => { + if (!sender.isDestroyed()) { + sender.send('theme-linked-file-changed', change); + } + }; + const watchSet = createThemeLinkedFileWatchSet(emit); + let disposed = false; + const onNavigation = (_event: Electron.Event, _url: string, isSameDoc: boolean, isMainFrame: boolean): void => { + if (isMainFrame && !isSameDoc) dispose(); + }; + const dispose = (): void => { + if (disposed) return; + disposed = true; + watchSet.dispose(); + linkedFileWatchSets.delete(senderId); + sender.removeListener('destroyed', dispose); + sender.removeListener('did-start-navigation', onNavigation); + }; + sender.once('destroyed', dispose); + sender.on('did-start-navigation', onNavigation); + const subscription = {watchSet, emit, dispose}; + linkedFileWatchSets.set(senderId, subscription); + return subscription; +} function getMimeType(filePath: string): string { switch (path.extname(filePath).toLowerCase()) { @@ -166,23 +214,87 @@ export function registerThemeLocalFileHandlers(getMainWindow: () => BrowserWindo if (result.canceled || result.filePaths.length === 0) { return []; } - const directoryPath = result.filePaths[0]; + let directoryPath: string; + try { + directoryPath = await fs.promises.realpath(result.filePaths[0]); + } catch (error) { + logger.warn('Failed to resolve selected theme directory', {directoryPath: result.filePaths[0], error}); + return []; + } const cssFiles = await collectCssFilesFromDirectory(directoryPath); const themes: Array = []; for (const filePath of cssFiles) { - try { - const stats = await fs.promises.stat(filePath); - if (!stats.isFile() || stats.size > THEME_DIRECTORY_CSS_MAX_BYTES) continue; - const css = await fs.promises.readFile(filePath, 'utf8'); - themes.push({ - fileName: path.relative(directoryPath, filePath) || path.basename(filePath), - path: filePath, - css, - }); - } catch (error) { - logger.warn('Failed to import CSS file from theme directory', {filePath, error}); + const result = await readThemeCssFile(filePath); + if (result.css === undefined) { + logger.warn('Failed to import CSS file from theme directory', {filePath, error: result.error}); + continue; } + themes.push({ + fileName: path.relative(directoryPath, filePath) || path.basename(filePath), + path: filePath, + css: result.css, + }); } + addAllowedThemeLocalFiles(themes.map((theme) => theme.path)); return themes; }); + ipcMain.handle('theme-linked-files-pick', async (event, options: unknown): Promise> => { + requirePrivilegedRendererDocumentSender(event, 'theme-linked-files-pick'); + const multiple = !(isRecord(options) && options.multiple === false); + const parent = BrowserWindow.fromWebContents(event.sender) ?? getMainWindow(); + const result = await showThemeOpenDialog(parent, { + title: t(multiple ? 'desktop.themes.importCss' : 'desktop.themes.linkFile'), + filters: [{name: t('desktop.themes.cssFilesFilter'), extensions: ['css']}], + properties: multiple ? ['openFile', 'multiSelections'] : ['openFile'], + }); + if (result.canceled) { + return []; + } + const files: Array = []; + for (const selectedPath of result.filePaths) { + let filePath: string; + try { + filePath = await fs.promises.realpath(selectedPath); + } catch (error) { + logger.warn('Failed to resolve selected theme CSS file', {filePath: selectedPath, error}); + continue; + } + const read = await readThemeCssFile(filePath); + if (read.css === undefined) { + logger.warn('Failed to read selected theme CSS file', {filePath, error: read.error}); + continue; + } + files.push({fileName: path.basename(filePath), path: filePath, css: read.css}); + } + addAllowedThemeLocalFiles(files.map((file) => file.path)); + return files; + }); + ipcMain.handle('theme-linked-files-watch', (event, payload: unknown): void => { + requirePrivilegedRendererDocumentSender(event, 'theme-linked-files-watch'); + const requested = Array.isArray(payload) + ? [...new Set(payload.filter((item): item is string => typeof item === 'string'))] + : []; + const paths = requested.slice(0, THEME_LINKED_FILES_MAX_WATCHED); + const overflow = requested.slice(THEME_LINKED_FILES_MAX_WATCHED); + if (paths.length === 0) { + linkedFileWatchSets.get(event.sender.id)?.dispose(); + return; + } + const allowedFiles = new Set(getAllowedThemeLocalFiles().map((entry) => path.resolve(entry))); + const allowed = paths.filter((filePath) => allowedFiles.has(path.resolve(filePath))); + const subscription = getLinkedFileWatchSubscription(event.sender); + for (const filePath of paths) { + if (!allowedFiles.has(path.resolve(filePath))) { + subscription.emit({path: filePath, error: 'not_allowed'}); + } + } + for (const filePath of overflow) { + subscription.emit({path: filePath, error: 'too_many'}); + } + if (allowed.length === 0) { + subscription.dispose(); + return; + } + subscription.watchSet.replace(allowed); + }); } diff --git a/fluxer_desktop/src/preload/index.ts b/fluxer_desktop/src/preload/index.ts index 3328801fd..755748dbd 100644 --- a/fluxer_desktop/src/preload/index.ts +++ b/fluxer_desktop/src/preload/index.ts @@ -50,6 +50,7 @@ import type { StreamerModeCaptureAppStatus, StreamingPriorityDiagnostics, TextareaContextMenuParams, + ThemeLinkedFileChange, TrayActionPayload, TrayRuntimeStatePayload, UpdaterContext, @@ -353,6 +354,13 @@ const api: ElectronAPI = { readThemeLocalFiles: (paths: Array) => ipcRenderer.invoke('theme-local-files-read', paths), clearThemeLocalFiles: () => ipcRenderer.invoke('theme-local-files-clear'), importThemeDirectory: () => ipcRenderer.invoke('theme-directory-import'), + pickThemeLinkedFiles: (options?: {multiple?: boolean}) => ipcRenderer.invoke('theme-linked-files-pick', options), + watchThemeLinkedFiles: (paths: Array) => ipcRenderer.invoke('theme-linked-files-watch', paths), + onThemeLinkedFileChange: (callback: (change: ThemeLinkedFileChange) => void): (() => void) => { + const handler = (_event: Electron.IpcRendererEvent, change: ThemeLinkedFileChange) => callback(change); + ipcRenderer.on('theme-linked-file-changed', handler); + return () => ipcRenderer.removeListener('theme-linked-file-changed', handler); + }, cacheVoiceBackgroundMedia: (options) => ipcRenderer.invoke('voice-background-media-cache:write', options), readVoiceBackgroundMedia: (id) => ipcRenderer.invoke('voice-background-media-cache:read', id), deleteVoiceBackgroundMedia: (id) => ipcRenderer.invoke('voice-background-media-cache:delete', id),