diff --git a/app/MindWork AI Studio/Assistants/EMail/WritingStylesExtensions.cs b/app/MindWork AI Studio/Assistants/EMail/WritingStylesExtensions.cs index 119f8042..7c9ddffb 100644 --- a/app/MindWork AI Studio/Assistants/EMail/WritingStylesExtensions.cs +++ b/app/MindWork AI Studio/Assistants/EMail/WritingStylesExtensions.cs @@ -2,14 +2,16 @@ namespace AIStudio.Assistants.EMail; public static class WritingStylesExtensions { + private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(WritingStylesExtensions).Namespace, nameof(WritingStylesExtensions)); + public static string Name(this WritingStyles style) => style switch { - WritingStyles.ACADEMIC => "Academic", - WritingStyles.PERSONAL => "Personal", - WritingStyles.BUSINESS_FORMAL => "Business formal", - WritingStyles.BUSINESS_INFORMAL => "Business informal", + WritingStyles.ACADEMIC => TB("Academic"), + WritingStyles.PERSONAL => TB("Personal"), + WritingStyles.BUSINESS_FORMAL => TB("Business formal"), + WritingStyles.BUSINESS_INFORMAL => TB("Business informal"), - _ => "Not specified", + _ => TB("Not specified"), }; public static string Prompt(this WritingStyles style) => style switch diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua index 2e67d6d2..e62e52fd 100644 --- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua +++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua @@ -133,6 +133,21 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::ASSISTANTEMAIL::T759263763"] = "De -- Please select a target language for the e-mail. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::ASSISTANTEMAIL::T891073054"] = "Please select a target language for the e-mail." +-- Personal +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T1851428013"] = "Personal" + +-- Academic +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T2055733914"] = "Academic" + +-- Business informal +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T4031465193"] = "Business informal" + +-- Business formal +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T477550214"] = "Business formal" + +-- Not specified +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T641241064"] = "Not specified" + -- Please provide a text as input. You might copy the desired text from a document or a website. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::GRAMMARSPELLING::ASSISTANTGRAMMARSPELLING::T137304886"] = "Please provide a text as input. You might copy the desired text from a document or a website." @@ -256,6 +271,48 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::ASSISTANTREWRITEIMPROVE:: -- Please provide a custom language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::ASSISTANTREWRITEIMPROVE::T656744944"] = "Please provide a custom language." +-- Passive voice +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T132535068"] = "Passive voice" + +-- Active voice +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T3548001825"] = "Active voice" + +-- Not Specified +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T4281286216"] = "Not Specified" + +-- Scientific (scientific papers, research reports) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1488581017"] = "Scientific (scientific papers, research reports)" + +-- Technical (manuals, documentation) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1577933546"] = "Technical (manuals, documentation)" + +-- Changelog (release notes, version history) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1755311660"] = "Changelog (release notes, version history)" + +-- Literary (fiction, poetry) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1823468337"] = "Literary (fiction, poetry)" + +-- Journalistic (magazines, newspapers, news) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T302304243"] = "Journalistic (magazines, newspapers, news)" + +-- Everyday (personal texts, social media) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3607558508"] = "Everyday (personal texts, social media)" + +-- Business (business emails, reports, presentations) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3674741297"] = "Business (business emails, reports, presentations)" + +-- Legal (legal texts, contracts) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3749505397"] = "Legal (legal texts, contracts)" + +-- Academic (essays, seminar papers) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T4090727535"] = "Academic (essays, seminar papers)" + +-- Not specified +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T641241064"] = "Not specified" + +-- Marketing (advertisements, sales texts) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T945714286"] = "Marketing (advertisements, sales texts)" + -- Your word or phrase UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::SYNONYM::ASSISTANTSYNONYMS::T1847246020"] = "Your word or phrase" @@ -316,6 +373,27 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::ASSISTANTTEXTSUMMARIZER:: -- Your expertise UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::ASSISTANTTEXTSUMMARIZER::T970222193"] = "Your expertise" +-- No change in complexity +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T1001090711"] = "No change in complexity" + +-- Teen language, e.g., for teenagers +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T1177455058"] = "Teen language, e.g., for teenagers" + +-- Scientific language for experts in this field +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T2687197281"] = "Scientific language for experts in this field" + +-- Scientific language for experts from other fields (interdisciplinary) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T2931193867"] = "Scientific language for experts from other fields (interdisciplinary)" + +-- Popular science language, e.g., for people interested in science +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T3161914110"] = "Popular science language, e.g., for people interested in science" + +-- Everyday language, e.g., for adults +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T3382050522"] = "Everyday language, e.g., for adults" + +-- Simple language, e.g., for children +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T530584375"] = "Simple language, e.g., for children" + -- Please select a target language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TRANSLATION::ASSISTANTTRANSLATION::T1173859091"] = "Please select a target language." @@ -1240,6 +1318,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T2842060373"] = "Instance Na -- Show available models UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T3763891899"] = "Show available models" +-- Model selection +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T416738168"] = "Model selection" + -- Host UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T808120719"] = "Host" @@ -2530,6 +2611,228 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T3948127789"] = "Suggestion" -- Your stage directions UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T779923726"] = "Your stage directions" +-- Tried to communicate with the LLM provider '{0}'. The API key might be invalid. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1073493061"] = "Tried to communicate with the LLM provider '{0}'. The API key might be invalid. The provider message is: '{1}'" + +-- Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1487597412"] = "Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. The required message format might be changed. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1674355816"] = "Tried to communicate with the LLM provider '{0}'. The required message format might be changed. The provider message is: '{1}'" + +-- Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1856278860"] = "Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. Even after {1} retries, there were some problems with the request. The provider message is: '{2}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T2249520705"] = "Tried to communicate with the LLM provider '{0}'. Even after {1} retries, there were some problems with the request. The provider message is: '{2}'" + +-- Tried to communicate with the LLM provider '{0}'. Something was not found. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T2780552614"] = "Tried to communicate with the LLM provider '{0}'. Something was not found. The provider message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. There were some problems with the request. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T3573577433"] = "Tried to communicate with the LLM provider '{0}'. There were some problems with the request. The provider message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. The server might be down or having issues. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T3806716694"] = "Tried to communicate with the LLM provider '{0}'. The server might be down or having issues. The provider message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. The provider is overloaded. The message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T4179546180"] = "Tried to communicate with the LLM provider '{0}'. The provider is overloaded. The message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. You might not be able to use this provider from your location. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T862369179"] = "Tried to communicate with the LLM provider '{0}'. You might not be able to use this provider from your location. The provider message is: '{1}'" + +-- The trust level of this provider **has not yet** been thoroughly **investigated and evaluated**. We do not know if your data is safe. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T1014558951"] = "The trust level of this provider **has not yet** been thoroughly **investigated and evaluated**. We do not know if your data is safe." + +-- You or your organization operate the LLM locally or within your trusted network. In terms of data processing and security, this is the best possible way. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T2124364471"] = "You or your organization operate the LLM locally or within your trusted network. In terms of data processing and security, this is the best possible way." + +-- The provider is located in the EU and is subject to the **GDPR** (General Data Protection Regulation). Additionally, the provider states that **your data is not used for training**. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3010553924"] = "The provider is located in the EU and is subject to the **GDPR** (General Data Protection Regulation). Additionally, the provider states that **your data is not used for training**." + +-- No provider selected. Please select a provider to get see its confidence level. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3368531176"] = "No provider selected. Please select a provider to get see its confidence level." + +-- The provider operates its service from the USA and is subject to **US jurisdiction**. In case of suspicion, authorities in the USA can access your data. However, **your data is not used for training** purposes. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3528165925"] = "The provider operates its service from the USA and is subject to **US jurisdiction**. In case of suspicion, authorities in the USA can access your data. However, **your data is not used for training** purposes." + +-- The provider operates its service from the USA and is subject to **U.S. jurisdiction**. In case of suspicion, authorities in the USA can access your data. Please inform yourself about the use of your data. We do not know if your data is safe. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3788466789"] = "The provider operates its service from the USA and is subject to **U.S. jurisdiction**. In case of suspicion, authorities in the USA can access your data. Please inform yourself about the use of your data. We do not know if your data is safe." + +-- The provider operates its service from China. In case of suspicion, authorities in the respective countries of operation may access your data. However, **your data is not used for training** purposes. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T991875725"] = "The provider operates its service from China. In case of suspicion, authorities in the respective countries of operation may access your data. However, **your data is not used for training** purposes." + +-- Medium +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T163471254"] = "Medium" + +-- Moderate +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T177463328"] = "Moderate" + +-- Unknown confidence level +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T1811522309"] = "Unknown confidence level" + +-- No provider selected +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T2897045472"] = "No provider selected" + +-- Low +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T2984088865"] = "Low" + +-- Untrusted +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T3063224793"] = "Untrusted" + +-- High +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T3188327965"] = "High" + +-- Very Low +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T786675843"] = "Very Low" + +-- Self-hosted +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T146444217"] = "Self-hosted" + +-- No provider selected +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T2897045472"] = "No provider selected" + +-- Unknown +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T3424652889"] = "Unknown" + +-- Navigation never expands, but there are tooltips +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1095779033"] = "Navigation never expands, but there are tooltips" + +-- Check every day +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1112287590"] = "Check every day" + +-- Toggle the overlay: the chat uses all the space, workspaces are temporarily shown +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1114668646"] = "Toggle the overlay: the chat uses all the space, workspaces are temporarily shown" + +-- Sidebar is always visible: show the workspaces next to the chat all the time +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1149606444"] = "Sidebar is always visible: show the workspaces next to the chat all the time" + +-- Always use the default chat provider when loading chats +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1188453609"] = "Always use the default chat provider when loading chats" + +-- Show also prototype features: these are works in progress; expect bugs and missing features +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1245257804"] = "Show also prototype features: these are works in progress; expect bugs and missing features" + +-- No key is sending the input +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1311973034"] = "No key is sending the input" + +-- Navigation never expands, no tooltips +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1402851833"] = "Navigation never expands, no tooltips" + +-- Store chats automatically +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1664293672"] = "Store chats automatically" + +-- Once at startup +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T184455356"] = "Once at startup" + +-- No automatic update checks +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1874928511"] = "No automatic update checks" + +-- Always expand navigation +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1991359958"] = "Always expand navigation" + +-- Show also experimental features: these are experimental; expect bugs, missing features, many changes +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2091731959"] = "Show also experimental features: these are experimental; expect bugs, missing features, many changes" + +-- Use the latest LLM provider, which was used before; use the default chat provider initially +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2128088682"] = "Use the latest LLM provider, which was used before; use the default chat provider initially" + +-- Navigation expands on mouse hover +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2195945406"] = "Navigation expands on mouse hover" + +-- Also show features ready for release; these should be stable +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2301448762"] = "Also show features ready for release; these should be stable" + +-- Check every week +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T238099712"] = "Check every week" + +-- Delete disappearing chats older than 1 year +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2405705561"] = "Delete disappearing chats older than 1 year" + +-- Store chats manually +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2520325466"] = "Store chats manually" + +-- Enter is sending the input +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2537778562"] = "Enter is sending the input" + +-- Not yet specified +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2566503670"] = "Not yet specified" + +-- No minimum confidence level chosen +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2828607242"] = "No minimum confidence level chosen" + +-- Do not specify the language +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2960082609"] = "Do not specify the language" + +-- Delete disappearing chats older than 7 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2975140581"] = "Delete disappearing chats older than 7 days" + +-- Always use the default chat provider for new chats +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2976921892"] = "Always use the default chat provider for new chats" + +-- Also show features in beta: these are almost ready for release; expect some bugs +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3061414822"] = "Also show features in beta: these are almost ready for release; expect some bugs" + +-- Check every hour +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3137986690"] = "Check every hour" + +-- Delete disappearing chats older than 180 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3491430707"] = "Delete disappearing chats older than 180 days" + +-- Disable workspaces +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3612390107"] = "Disable workspaces" + +-- Toggle the sidebar: show the workspaces next to the chat when desired +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3711207137"] = "Toggle the sidebar: show the workspaces next to the chat when desired" + +-- Also show features in alpha: these are in development; expect bugs and missing features +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T4146964761"] = "Also show features in alpha: these are in development; expect bugs and missing features" + +-- All preview features are hidden +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T4289410063"] = "All preview features are hidden" + +-- When possible, use the LLM provider which was used for each chat in the first place +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T75376144"] = "When possible, use the LLM provider which was used for each chat in the first place" + +-- No automatic maintenance for disappearing chats; old chats will never be deleted +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T803751240"] = "No automatic maintenance for disappearing chats; old chats will never be deleted" + +-- Delete disappearing chats older than 90 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T869922627"] = "Delete disappearing chats older than 90 days" + +-- Modifier key + enter is sending the input +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T870850829"] = "Modifier key + enter is sending the input" + +-- Delete disappearing chats older than 30 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T937754037"] = "Delete disappearing chats older than 30 days" + +-- This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider. +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T1531417967"] = "This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider." + +-- This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider. +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T3187068849"] = "This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider." + +-- Please select a security policy +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T3511915070"] = "Please select a security policy" + +-- The security of the data source is not specified yet. You cannot use this data source until you specify a security policy. +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T4056804813"] = "The security of the data source is not specified yet. You cannot use this data source until you specify a security policy." + +-- Unknown security policy +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T4277536697"] = "Unknown security policy" + +-- Local File +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T1687345358"] = "Local File" + +-- External ERI Server (v1) +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T3020093889"] = "External ERI Server (v1)" + +-- None +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T810547195"] = "None" + +-- Local Directory +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T926703547"] = "Local Directory" + -- Unknown option UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3964902774"] = "Unknown option" @@ -2538,3 +2841,657 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3988034 -- Choose the language automatically, based on your system language. UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T485389934"] = "Choose the language automatically, based on your system language." + +-- Writer Mode: Experiments about how to write long texts using AI +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T158702544"] = "Writer Mode: Experiments about how to write long texts using AI" + +-- Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T1847148141"] = "Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files" + +-- Plugins: Preview of our plugin system where you can extend the functionality of the app +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2056842933"] = "Plugins: Preview of our plugin system where you can extend the functionality of the app" + +-- RAG: Preview of our RAG implementation where you can refer your files or integrate enterprise data within your company +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2708939138"] = "RAG: Preview of our RAG implementation where you can refer your files or integrate enterprise data within your company" + +-- Unknown preview feature +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2722827307"] = "Unknown preview feature" + +-- Use no data sources, when sending an assistant result to a chat +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T1223925477"] = "Use no data sources, when sending an assistant result to a chat" + +-- Unknown behavior +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T1394162669"] = "Unknown behavior" + +-- Apply standard chat data source options, when sending an assistant result to a chat +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T2129722199"] = "Apply standard chat data source options, when sending an assistant result to a chat" + +-- Always use dark theme +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T197192304"] = "Always use dark theme" + +-- Synchronized with the operating system settings +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T1987547483"] = "Synchronized with the operating system settings" + +-- Unknown setting +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T4107955313"] = "Unknown setting" + +-- Always use light theme +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T534715610"] = "Always use light theme" + +-- Use no profile +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::PROFILE::T2205839602"] = "Use no profile" + +-- SSO (Kerberos) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T268552140"] = "SSO (Kerberos)" + +-- Access Token +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T2891154022"] = "Access Token" + +-- Unknown authentication method +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T3296465240"] = "Unknown authentication method" + +-- None +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T810547195"] = "None" + +-- Username & Password +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T863358904"] = "Username & Password" + +-- Spanish (Spain) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1269145091"] = "Spanish (Spain)" + +-- German (Germany) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T133055431"] = "German (Germany)" + +-- Other +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1849229205"] = "Other" + +-- German (Switzerland) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1914931075"] = "German (Switzerland)" + +-- German (Austria) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1992157553"] = "German (Austria)" + +-- Japanese (Japan) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2064802889"] = "Japanese (Japan)" + +-- French (France) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2496010681"] = "French (France)" + +-- Please select the target language +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2536245199"] = "Please select the target language" + +-- Do not specify the language +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2960082609"] = "Do not specify the language" + +-- Hindi (India) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3245596873"] = "Hindi (India)" + +-- Chinese (Simplified) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3441562249"] = "Chinese (Simplified)" + +-- English (US) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3729684486"] = "English (US)" + +-- English (UK) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3730964414"] = "English (UK)" + +-- Do not change the language +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T658789330"] = "Do not change the language" + +-- Coding Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1082499335"] = "Coding Assistant" + +-- E-Mail Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1185802704"] = "E-Mail Assistant" + +-- My Tasks Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1546040625"] = "My Tasks Assistant" + +-- Grammar & Spelling Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T166453786"] = "Grammar & Spelling Assistant" + +-- Legal Check Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1886447798"] = "Legal Check Assistant" + +-- Job Posting Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2212811874"] = "Job Posting Assistant" + +-- Icon Finder Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2457005512"] = "Icon Finder Assistant" + +-- Text Summarizer Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2684676843"] = "Text Summarizer Assistant" + +-- Synonym Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2921123194"] = "Synonym Assistant" + +-- Translation Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T3887962308"] = "Translation Assistant" + +-- Agenda Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4034795997"] = "Agenda Assistant" + +-- ERI Server +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4204533420"] = "ERI Server" + +-- Rewrite Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4262148639"] = "Rewrite Assistant" + +-- Localization Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T446674624"] = "Localization Assistant" + +-- New Chat +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T826248509"] = "New Chat" + +-- Trust LLM providers from the USA +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T1748300640"] = "Trust LLM providers from the USA" + +-- Configure your own confidence scheme +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T2017415465"] = "Configure your own confidence scheme" + +-- Trust LLM providers from the USA and Europe +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T2498514901"] = "Trust LLM providers from the USA and Europe" + +-- Unknown confidence scheme +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T292756058"] = "Unknown confidence scheme" + +-- Trust LLM providers from Asia +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T3016210842"] = "Trust LLM providers from Asia" + +-- Trust LLM providers from Europe +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T357239630"] = "Trust LLM providers from Europe" + +-- Trust only local LLM providers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T3893997203"] = "Trust only local LLM providers" + +-- Trust all LLM providers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T4107860491"] = "Trust all LLM providers" + +-- The related data is not allowed to be sent to any LLM provider. This means that this data source cannot be used at the moment. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T1555790630"] = "The related data is not allowed to be sent to any LLM provider. This means that this data source cannot be used at the moment." + +-- The related data can be sent to any provider, regardless of where it is hosted (cloud or self-hosted). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T2031831095"] = "The related data can be sent to any provider, regardless of where it is hosted (cloud or self-hosted)." + +-- The related data can be sent to a provider that is hosted by the same organization, either on-premises or locally. Cloud-based providers are not allowed. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T2943101676"] = "The related data can be sent to a provider that is hosted by the same organization, either on-premises or locally. Cloud-based providers are not allowed." + +-- Unknown configuration. This data source cannot be used at the moment. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T647911863"] = "Unknown configuration. This data source cannot be used at the moment." + +-- Failed to execute the retrieval request: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1270753490"] = "Failed to execute the retrieval request: the request was canceled either by the user or due to a timeout." + +-- Failed to retrieve the embedding information: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1368217771"] = "Failed to retrieve the embedding information: the ERI server did not return a valid response." + +-- Failed to retrieve the password. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1460025425"] = "Failed to retrieve the password." + +-- Failed to authenticate with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1741376192"] = "Failed to authenticate with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to retrieve the security requirements: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1931074357"] = "Failed to retrieve the security requirements: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to execute the retrieval request due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1951868505"] = "Failed to execute the retrieval request due to an exception: {0}" + +-- Failed to execute the retrieval request: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1978354870"] = "Failed to execute the retrieval request: the ERI server did not return a valid response." + +-- Failed to retrieve the security requirements: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T231684456"] = "Failed to retrieve the security requirements: the ERI server did not return a valid response." + +-- Failed to authenticate with the server: the response was invalid. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2332248448"] = "Failed to authenticate with the server: the response was invalid." + +-- Failed to retrieve the embedding information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2368384424"] = "Failed to retrieve the embedding information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to retrieve the authentication methods: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2482165925"] = "Failed to retrieve the authentication methods: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- The authentication method is not supported yet. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2536034936"] = "The authentication method is not supported yet." + +-- Failed to authenticate with the ERI server: the response was invalid. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2549452166"] = "Failed to authenticate with the ERI server: the response was invalid." + +-- Failed to retrieve the retrieval information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2558778293"] = "Failed to retrieve the retrieval information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to authenticate with the ERI server: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2673501628"] = "Failed to authenticate with the ERI server: the request was canceled either by the user or due to a timeout." + +-- Failed to authenticate with the ERI server due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2858189239"] = "Failed to authenticate with the ERI server due to an exception: {0}" + +-- Failed to retrieve the security requirements: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T286437836"] = "Failed to retrieve the security requirements: the request was canceled either by the user or due to a timeout." + +-- Failed to retrieve the security requirements due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3221004295"] = "Failed to retrieve the security requirements due to an exception: {0}" + +-- Failed to retrieve the data source information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3290521480"] = "Failed to retrieve the data source information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to retrieve the data source information due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3354496288"] = "Failed to retrieve the data source information due to an exception: {0}" + +-- Failed to retrieve the authentication methods due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3366487415"] = "Failed to retrieve the authentication methods due to an exception: {0}" + +-- Failed to retrieve the authentication methods: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3654094460"] = "Failed to retrieve the authentication methods: the request was canceled either by the user or due to a timeout." + +-- Failed to retrieve the retrieval information: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3721797352"] = "Failed to retrieve the retrieval information: the ERI server did not return a valid response." + +-- Failed to retrieve the retrieval information: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3809548876"] = "Failed to retrieve the retrieval information: the request was canceled either by the user or due to a timeout." + +-- Failed to retrieve the retrieval information due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3862033799"] = "Failed to retrieve the retrieval information due to an exception: {0}" + +-- Failed to retrieve the data source information: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T4006612619"] = "Failed to retrieve the data source information: the ERI server did not return a valid response." + +-- Failed to retrieve the embedding information: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T469891013"] = "Failed to retrieve the embedding information: the request was canceled either by the user or due to a timeout." + +-- Failed to execute the retrieval request: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T615338311"] = "Failed to execute the retrieval request: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to retrieve the data source information: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T690733413"] = "Failed to retrieve the data source information: the request was canceled either by the user or due to a timeout." + +-- Failed to retrieve the embedding information due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T765050112"] = "Failed to retrieve the embedding information due to an exception: {0}" + +-- Failed to retrieve the access token. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T816853779"] = "Failed to retrieve the access token." + +-- Failed to retrieve the authentication methods: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T984407320"] = "Failed to retrieve the authentication methods: the ERI server did not return a valid response." + +-- The table AUTHORS does not exist or is using an invalid syntax. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1068328139"] = "The table AUTHORS does not exist or is using an invalid syntax." + +-- The field NAME does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1340447036"] = "The field NAME does not exist or is not a valid string." + +-- The field SOURCE_URL does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1421846488"] = "The field SOURCE_URL does not exist or is not a valid string." + +-- The field VERSION does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T148801541"] = "The field VERSION does not exist or is not a valid string." + +-- The table CATEGORIES does not exist or is using an invalid syntax. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1505723383"] = "The table CATEGORIES does not exist or is using an invalid syntax." + +-- The table TARGET_GROUPS is empty or is not a valid table of strings. Valid target groups are: {0}. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1619769690"] = "The table TARGET_GROUPS is empty or is not a valid table of strings. Valid target groups are: {0}." + +-- The field ID is empty. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1733171739"] = "The field ID is empty. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)." + +-- The field VERSION is empty. The version number must be formatted as string in the major.minor.patch format (X.X.X). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2115845776"] = "The field VERSION is empty. The version number must be formatted as string in the major.minor.patch format (X.X.X)." + +-- The field ID does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2203072274"] = "The field ID does not exist or is not a valid string." + +-- The field DESCRIPTION is empty. The description must be a non-empty string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2262604281"] = "The field DESCRIPTION is empty. The description must be a non-empty string." + +-- The field DESCRIPTION does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T229488255"] = "The field DESCRIPTION does not exist or is not a valid string." + +-- The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2320984047"] = "The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'." + +-- The field VERSION is not a valid version number. The version number must be formatted as string in the major.minor.patch format (X.X.X). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2538827536"] = "The field VERSION is not a valid version number. The version number must be formatted as string in the major.minor.patch format (X.X.X)." + +-- The table AUTHORS is empty. At least one author must be specified. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2981832540"] = "The table AUTHORS is empty. At least one author must be specified." + +-- The field SUPPORT_CONTACT is empty. The support contact must be a non-empty string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3524814526"] = "The field SUPPORT_CONTACT is empty. The support contact must be a non-empty string." + +-- The UI_TEXT_CONTENT table does not exist or is not a valid table. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3667396132"] = "The UI_TEXT_CONTENT table does not exist or is not a valid table." + +-- The field NAME is empty. The name must be a non-empty string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3763759727"] = "The field NAME is empty. The name must be a non-empty string." + +-- The field DEPRECATION_MESSAGE does not exist, is not a valid string. This message is optional: use an empty string to indicate that the plugin is not deprecated. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3890922974"] = "The field DEPRECATION_MESSAGE does not exist, is not a valid string. This message is optional: use an empty string to indicate that the plugin is not deprecated." + +-- The field SUPPORT_CONTACT does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T4189964941"] = "The field SUPPORT_CONTACT does not exist or is not a valid string." + +-- The table TARGET_GROUPS does not exist or is using an invalid syntax. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T447530369"] = "The table TARGET_GROUPS does not exist or is using an invalid syntax." + +-- The field ID is not a valid GUID / UUID. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T471697173"] = "The field ID is not a valid GUID / UUID. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)." + +-- The table CATEGORIES is empty. At least one category is necessary. Valid categories are: {0}. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T529114360"] = "The table CATEGORIES is empty. At least one category is necessary. Valid categories are: {0}." + +-- The field IS_MAINTAINED does not exist or is not a valid boolean. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T773237915"] = "The field IS_MAINTAINED does not exist or is not a valid boolean." + +-- Writing +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1011777007"] = "Writing" + +-- Software Development +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1025369409"] = "Software Development" + +-- Business +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T131837803"] = "Business" + +-- Music +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1481252212"] = "Music" + +-- Unknown plugin category +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1585885320"] = "Unknown plugin category" + +-- Weather +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1726658099"] = "Weather" + +-- Industry +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T208409567"] = "Industry" + +-- Art +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2449163306"] = "Art" + +-- Sports +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2465108186"] = "Sports" + +-- Technology +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2499534031"] = "Technology" + +-- Health +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2556511663"] = "Health" + +-- Utility +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2587055103"] = "Utility" + +-- Shopping +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2704337693"] = "Shopping" + +-- Fitness +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2892517655"] = "Fitness" + +-- Food +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3179069417"] = "Food" + +-- Gaming +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3246118672"] = "Gaming" + +-- News +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3421767782"] = "News" + +-- Entertainment +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3562575449"] = "Entertainment" + +-- Education +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T379048501"] = "Education" + +-- AI Studio Core +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4005865962"] = "AI Studio Core" + +-- Social +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4177547506"] = "Social" + +-- Political +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4245273692"] = "Political" + +-- Fiction +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T616807299"] = "Fiction" + +-- Travel +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T745861401"] = "Travel" + +-- None +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T810547195"] = "None" + +-- Party +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T850565431"] = "Party" + +-- Science +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T904504157"] = "Science" + +-- Content Creation +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T914642375"] = "Content Creation" + +-- The field IETF_TAG does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T1796010240"] = "The field IETF_TAG does not exist or is not a valid string." + +-- The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T3376221777"] = "The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code." + +-- The field IETF_TAG is empty. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T3877047896"] = "The field IETF_TAG is empty. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code." + +-- The field LANG_NAME is empty. Use a valid language name. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T4112586014"] = "The field LANG_NAME is empty. Use a valid language name." + +-- The field LANG_NAME does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T4204700759"] = "The field LANG_NAME does not exist or is not a valid string." + +-- Artists +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T1142248183"] = "Artists" + +-- Children +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T188567026"] = "Children" + +-- Industrial workers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T2520336817"] = "Industrial workers" + +-- Students +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T2905889225"] = "Students" + +-- Scientists +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T332785734"] = "Scientists" + +-- Adults +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3335941460"] = "Adults" + +-- No target group +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3644477204"] = "No target group" + +-- Business professionals +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3670621687"] = "Business professionals" + +-- Teenagers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3696960735"] = "Teenagers" + +-- Unknown target group +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T384321997"] = "Unknown target group" + +-- Office workers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3873911022"] = "Office workers" + +-- Teachers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T48460338"] = "Teachers" + +-- Everyone +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T622959000"] = "Everyone" + +-- Software developers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T831424531"] = "Software developers" + +-- Theme plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T1682350097"] = "Theme plugin" + +-- Unknown plugin type +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2313808600"] = "Unknown plugin type" + +-- Assistant plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2321563994"] = "Assistant plugin" + +-- Language plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2370593926"] = "Language plugin" + +-- Configuration plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T3353383632"] = "Configuration plugin" + +-- Standard augmentation process +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::AUGMENTATIONPROCESSES::AUGMENTATIONONE::T1072508429"] = "Standard augmentation process" + +-- This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::AUGMENTATIONPROCESSES::AUGMENTATIONONE::T3240406069"] = "This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread." + +-- Automatic AI data source selection with heuristik source reduction +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::DATASOURCESELECTIONPROCESSES::AGENTICSRCSELWITHDYNHEUR::T2339257645"] = "Automatic AI data source selection with heuristik source reduction" + +-- Automatically selects the appropriate data sources based on the last prompt. Applies a heuristic reduction at the end to reduce the number of data sources. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::DATASOURCESELECTIONPROCESSES::AGENTICSRCSELWITHDYNHEUR::T648937779"] = "Automatically selects the appropriate data sources based on the last prompt. Applies a heuristic reduction at the end to reduce the number of data sources." + +-- This RAG process filters data sources, automatically selects appropriate sources, optionally allows manual source selection, retrieves data, and automatically validates the retrieval context. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T3047786484"] = "This RAG process filters data sources, automatically selects appropriate sources, optionally allows manual source selection, retrieves data, and automatically validates the retrieval context." + +-- AI source selection with AI retrieval context validation +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T3775725978"] = "AI source selection with AI retrieval context validation" + +-- PDF Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T3108466742"] = "PDF Files" + +-- All Image Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T4086723714"] = "All Image Files" + +-- Text Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T639143005"] = "Text Files" + +-- All Office Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T709668067"] = "All Office Files" + +-- Failed to delete the API key due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::APIKEYS::T3658273365"] = "Failed to delete the API key due to an API issue." + +-- Failed to get the API key due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::APIKEYS::T3875720022"] = "Failed to get the API key due to an API issue." + +-- Successfully copied the text to your clipboard +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::CLIPBOARD::T3351807428"] = "Successfully copied the text to your clipboard" + +-- Failed to copy the text to your clipboard. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::CLIPBOARD::T3724548108"] = "Failed to copy the text to your clipboard." + +-- Failed to delete the secret data due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T2303057928"] = "Failed to delete the secret data due to an API issue." + +-- Failed to get the secret data due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T4007657575"] = "Failed to get the secret data due to an API issue." + +-- No update found. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T1015418291"] = "No update found." + +-- The hostname is not a valid HTTP(S) URL. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL." + +-- The connection test failed. Please check the connection settings. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T132896331"] = "The connection test failed. Please check the connection settings." + +-- Please select an embedding provider. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1461238528"] = "Please select an embedding provider." + +-- The file does not exist. Please select a valid file. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T148464502"] = "The file does not exist. Please select a valid file." + +-- Please select one retrieval process. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1515898234"] = "Please select one retrieval process." + +-- This data source can only be used with a self-hosted LLM provider. Please change the security policy. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1728967730"] = "This data source can only be used with a self-hosted LLM provider. Please change the security policy." + +-- The username must not be empty. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1829419906"] = "The username must not be empty." + +-- The hostname must start with either http:// or https:// +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T193387467"] = "The hostname must start with either http:// or https://" + +-- Please enter a hostname, e.g., http://localhost +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1990396672"] = "Please enter a hostname, e.g., http://localhost" + +-- Please select one valid authentication method. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2025964684"] = "Please select one valid authentication method." + +-- The name must not exceed 40 characters. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2160507967"] = "The name must not exceed 40 characters." + +-- Please select your security policy. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2250909198"] = "Please select your security policy." + +-- Please test the connection before saving. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T285470497"] = "Please test the connection before saving." + +-- Please enter your secure access token. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3086932434"] = "Please enter your secure access token." + +-- The path does not exist. Please select a valid directory. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3146272446"] = "The path does not exist. Please select a valid directory." + +-- The path must not be empty. Please select a directory. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3202118305"] = "The path must not be empty. Please select a directory." + +-- The name must not be empty. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3243861903"] = "The name must not be empty." + +-- Please enter your password. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3888492477"] = "Please enter your password." + +-- The port must be between 1 and 65535. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3965971107"] = "The port must be between 1 and 65535." + +-- The name is already used by another data source. Please choose a different name. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T4001510395"] = "The name is already used by another data source. Please choose a different name." + +-- Please acknowledge that you are aware of the cloud embedding implications. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T490875633"] = "Please acknowledge that you are aware of the cloud embedding implications." + +-- The file path must not be empty. Please select a file. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T878007824"] = "The file path must not be empty. Please select a file." + +-- Please enter the secret necessary for authentication. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T968385876"] = "Please enter the secret necessary for authentication." + +-- The hostname is not a valid HTTP(S) URL. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL." + +-- The instance name must not exceed 40 characters. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1117188308"] = "The instance name must not exceed 40 characters." + +-- Please enter a hostname, e.g., http://localhost:1234 +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T125334762"] = "Please enter a hostname, e.g., http://localhost:1234" + +-- The instance name must be unique; the chosen name is already in use. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1301966140"] = "The instance name must be unique; the chosen name is already in use." + +-- Please select a provider. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1809312323"] = "Please select a provider." + +-- The hostname must start with either http:// or https:// +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T193387467"] = "The hostname must start with either http:// or https://" + +-- Please select a host. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T2257097222"] = "Please select a host." + +-- Please enter an API key. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T3550629491"] = "Please enter an API key." + +-- Please enter an instance name. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T3999823516"] = "Please enter an instance name." + +-- Please select an Hugging Face inference provider. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T497939286"] = "Please select an Hugging Face inference provider." + +-- Please select a model. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T818893091"] = "Please select a model." + +-- Delete Chat +UI_TEXT_CONTENT["AISTUDIO::TOOLS::WORKSPACEBEHAVIOUR::T2244038752"] = "Delete Chat" diff --git a/app/MindWork AI Studio/Assistants/RewriteImprove/SentenceStructureExtensions.cs b/app/MindWork AI Studio/Assistants/RewriteImprove/SentenceStructureExtensions.cs index 3abefd1b..66104e01 100644 --- a/app/MindWork AI Studio/Assistants/RewriteImprove/SentenceStructureExtensions.cs +++ b/app/MindWork AI Studio/Assistants/RewriteImprove/SentenceStructureExtensions.cs @@ -2,12 +2,14 @@ namespace AIStudio.Assistants.RewriteImprove; public static class SentenceStructureExtensions { + private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(SentenceStructureExtensions).Namespace, nameof(SentenceStructureExtensions)); + public static string Name(this SentenceStructure sentenceStructure) => sentenceStructure switch { - SentenceStructure.ACTIVE => "Active voice", - SentenceStructure.PASSIVE => "Passive voice", + SentenceStructure.ACTIVE => TB("Active voice"), + SentenceStructure.PASSIVE => TB("Passive voice"), - _ => "Not Specified", + _ => TB("Not Specified"), }; public static string Prompt(this SentenceStructure sentenceStructure) => sentenceStructure switch diff --git a/app/MindWork AI Studio/Assistants/RewriteImprove/WritingStylesExtensions.cs b/app/MindWork AI Studio/Assistants/RewriteImprove/WritingStylesExtensions.cs index 069c009c..f7648e86 100644 --- a/app/MindWork AI Studio/Assistants/RewriteImprove/WritingStylesExtensions.cs +++ b/app/MindWork AI Studio/Assistants/RewriteImprove/WritingStylesExtensions.cs @@ -2,20 +2,22 @@ namespace AIStudio.Assistants.RewriteImprove; public static class WritingStylesExtensions { + private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(WritingStylesExtensions).Namespace, nameof(WritingStylesExtensions)); + public static string Name(this WritingStyles style) => style switch { - WritingStyles.EVERYDAY => "Everyday (personal texts, social media)", - WritingStyles.BUSINESS => "Business (business emails, reports, presentations)", - WritingStyles.SCIENTIFIC => "Scientific (scientific papers, research reports)", - WritingStyles.JOURNALISTIC => "Journalistic (magazines, newspapers, news)", - WritingStyles.LITERARY => "Literary (fiction, poetry)", - WritingStyles.TECHNICAL => "Technical (manuals, documentation)", - WritingStyles.MARKETING => "Marketing (advertisements, sales texts)", - WritingStyles.ACADEMIC => "Academic (essays, seminar papers)", - WritingStyles.LEGAL => "Legal (legal texts, contracts)", - WritingStyles.CHANGELOG => "Changelog (release notes, version history)", + WritingStyles.EVERYDAY => TB("Everyday (personal texts, social media)"), + WritingStyles.BUSINESS => TB("Business (business emails, reports, presentations)"), + WritingStyles.SCIENTIFIC => TB("Scientific (scientific papers, research reports)"), + WritingStyles.JOURNALISTIC => TB("Journalistic (magazines, newspapers, news)"), + WritingStyles.LITERARY => TB("Literary (fiction, poetry)"), + WritingStyles.TECHNICAL => TB("Technical (manuals, documentation)"), + WritingStyles.MARKETING => TB("Marketing (advertisements, sales texts)"), + WritingStyles.ACADEMIC => TB("Academic (essays, seminar papers)"), + WritingStyles.LEGAL => TB("Legal (legal texts, contracts)"), + WritingStyles.CHANGELOG => TB("Changelog (release notes, version history)"), - _ => "Not specified", + _ => TB("Not specified"), }; public static string Prompt(this WritingStyles style) => style switch diff --git a/app/MindWork AI Studio/Assistants/TextSummarizer/ComplexityExtensions.cs b/app/MindWork AI Studio/Assistants/TextSummarizer/ComplexityExtensions.cs index d4b75178..15cb399b 100644 --- a/app/MindWork AI Studio/Assistants/TextSummarizer/ComplexityExtensions.cs +++ b/app/MindWork AI Studio/Assistants/TextSummarizer/ComplexityExtensions.cs @@ -2,18 +2,20 @@ namespace AIStudio.Assistants.TextSummarizer; public static class ComplexityExtensions { + private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(ComplexityExtensions).Namespace, nameof(ComplexityExtensions)); + public static string Name(this Complexity complexity) => complexity switch { - Complexity.NO_CHANGE => "No change in complexity", + Complexity.NO_CHANGE => TB("No change in complexity"), - Complexity.SIMPLE_LANGUAGE => "Simple language, e.g., for children", - Complexity.TEEN_LANGUAGE => "Teen language, e.g., for teenagers", - Complexity.EVERYDAY_LANGUAGE => "Everyday language, e.g., for adults", - Complexity.POPULAR_SCIENCE_LANGUAGE => "Popular science language, e.g., for people interested in science", - Complexity.SCIENTIFIC_LANGUAGE_FIELD_EXPERTS => "Scientific language for experts in this field", - Complexity.SCIENTIFIC_LANGUAGE_OTHER_EXPERTS => "Scientific language for experts from other fields (interdisciplinary)", + Complexity.SIMPLE_LANGUAGE => TB("Simple language, e.g., for children"), + Complexity.TEEN_LANGUAGE => TB("Teen language, e.g., for teenagers"), + Complexity.EVERYDAY_LANGUAGE => TB("Everyday language, e.g., for adults"), + Complexity.POPULAR_SCIENCE_LANGUAGE => TB("Popular science language, e.g., for people interested in science"), + Complexity.SCIENTIFIC_LANGUAGE_FIELD_EXPERTS => TB("Scientific language for experts in this field"), + Complexity.SCIENTIFIC_LANGUAGE_OTHER_EXPERTS => TB("Scientific language for experts from other fields (interdisciplinary)"), - _ => "No change in complexity", + _ => TB("No change in complexity"), }; public static string Prompt(this Complexity complexity, string expertInField) => complexity switch diff --git a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor index 4b45637a..6f12fc78 100644 --- a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor +++ b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor @@ -79,7 +79,7 @@ @* ReSharper restore Asp.Entity *@ } - + @if (this.DataLLMProvider.IsLLMModelProvidedManually()) { diff --git a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua index ca902253..98432572 100644 --- a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua @@ -135,6 +135,21 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::ASSISTANTEMAIL::T759263763"] = "Li -- Please select a target language for the e-mail. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::ASSISTANTEMAIL::T891073054"] = "Bitte wählen Sie eine Zielsprache für die E-Mail aus." +-- Personal +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T1851428013"] = "Persönlich" + +-- Academic +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T2055733914"] = "Akademisch" + +-- Business informal +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T4031465193"] = "Geschäftlich informell" + +-- Business formal +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T477550214"] = "Geschäftlich formell" + +-- Not specified +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T641241064"] = "Nicht angegeben" + -- Please provide a text as input. You might copy the desired text from a document or a website. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::GRAMMARSPELLING::ASSISTANTGRAMMARSPELLING::T137304886"] = "Bitte geben Sie einen Text ein. Sie können den gewünschten Text aus einem Dokument oder einer Website kopieren." @@ -258,8 +273,50 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::ASSISTANTREWRITEIMPROVE:: -- Please provide a custom language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::ASSISTANTREWRITEIMPROVE::T656744944"] = "Bitte geben Sie eine benutzerdefinierte Sprache an." +-- Passive voice +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T132535068"] = "Passive Sprache" + +-- Active voice +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T3548001825"] = "Aktive Sprache" + +-- Not Specified +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T4281286216"] = "Nicht angegeben" + +-- Scientific (scientific papers, research reports) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1488581017"] = "Wissenschaftlich (wissenschaftliche Arbeiten, Forschungsberichte)" + +-- Technical (manuals, documentation) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1577933546"] = "Technisch (Handbücher, Dokumentation)" + +-- Changelog (release notes, version history) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1755311660"] = "Änderungsprotokoll (Versionshinweise, Versionsverlauf)" + +-- Literary (fiction, poetry) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1823468337"] = "Literarisch (Belletristik, Lyrik)" + +-- Journalistic (magazines, newspapers, news) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T302304243"] = "Journalistisch (Zeitschriften, Zeitungen, Nachrichten)" + +-- Everyday (personal texts, social media) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3607558508"] = "Alltag (persönliche Texte, soziale Medien)" + +-- Business (business emails, reports, presentations) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3674741297"] = "Geschäftlich (geschäftliche E-Mails, Berichte, Präsentationen)" + +-- Legal (legal texts, contracts) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3749505397"] = "Rechtlich (rechtliche Texte, Verträge)" + +-- Academic (essays, seminar papers) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T4090727535"] = "Akademisch (Essays, Seminararbeiten)" + +-- Not specified +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T641241064"] = "Nicht angegeben" + +-- Marketing (advertisements, sales texts) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T945714286"] = "Marketing (Werbung, Verkaufstexte)" + -- Your word or phrase -UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::SYNONYM::ASSISTANTSYNONYMS::T1847246020"] = "Ihr Wort oder Ausdruck" +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::SYNONYM::ASSISTANTSYNONYMS::T1847246020"] = "Ihr Wort oder Phrase" -- (Optional) The context for the given word or phrase UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::SYNONYM::ASSISTANTSYNONYMS::T2250963999"] = "(Optional) Der Kontext für das angegebene Wort oder die Phrase" @@ -318,6 +375,27 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::ASSISTANTTEXTSUMMARIZER:: -- Your expertise UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::ASSISTANTTEXTSUMMARIZER::T970222193"] = "Ihre Fachkenntnisse" +-- No change in complexity +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T1001090711"] = "Keine Änderung der Komplexität" + +-- Teen language, e.g., for teenagers +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T1177455058"] = "Jugendsprache, z. B. für Teenager" + +-- Scientific language for experts in this field +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T2687197281"] = "Wissenschaftliche Fachsprache für Experten auf diesem Gebiet" + +-- Scientific language for experts from other fields (interdisciplinary) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T2931193867"] = "Wissenschaftliche Sprache für Experten aus anderen Disziplinen" + +-- Popular science language, e.g., for people interested in science +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T3161914110"] = "Populärwissenschaftliche Sprache, z. B. für wissenschaftlich Interessierte" + +-- Everyday language, e.g., for adults +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T3382050522"] = "Alltagssprache, z. B. für Erwachsene" + +-- Simple language, e.g., for children +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T530584375"] = "Einfache Sprache, zum Beispiel für Kinder" + -- Please select a target language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TRANSLATION::ASSISTANTTRANSLATION::T1173859091"] = "Bitte wählen Sie eine Zielsprache aus." @@ -435,8 +513,8 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T3403290862"] = "Der ausge -- Select a provider first UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T3654197869"] = "Wähle zuerst einen Anbieter aus" --- Start temporary chat -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T4113970938"] = "Temporären Chat starten" +-- New disappearing chat +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T4113970938"] = "Neuen selbstlöschenden Chat starten" -- Please select the workspace where you want to move the chat to. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T474393241"] = "Bitte wählen Sie den Arbeitsbereich aus, in den Sie den Chat verschieben möchten." @@ -1242,6 +1320,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T2842060373"] = "Instanzname -- Show available models UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T3763891899"] = "Verfügbare Modelle anzeigen" +-- Model selection +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T416738168"] = "Modellauswahl" + -- Host UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T808120719"] = "Host" @@ -2061,7 +2142,7 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2864211629"] = "Bitte warten Sie -- Supporters UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2929332068"] = "Unterstützer" --- Writer +-- Writing UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2979224202"] = "Schreiben" -- Show details @@ -2532,11 +2613,888 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T3948127789"] = "Vorschlag" -- Your stage directions UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T779923726"] = "Ihre Regieanweisungen" +-- Tried to communicate with the LLM provider '{0}'. The API key might be invalid. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1073493061"] = "Es wurde versucht mit dem LLM-Anbieter '{0}' zu kommunizieren. Der API-Schlüssel könnte ungültig sein. Die Anbietermeldung lautet: '{1}'" + +-- Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1487597412"] = "Beim Versuch, die Antwort des LLM-Anbieters '{0}' zu streamen, sind Probleme aufgetreten. Die Meldung lautet: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. The required message format might be changed. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1674355816"] = "Es wurde versucht, mit dem LLM-Anbieter '{0}' zu kommunizieren. Das erforderliche Nachrichtenformat könnte sich geändert haben. Die Mitteilung des Anbieters lautet: '{1}'" + +-- Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1856278860"] = "Der Versuch, die Antwort des LLM-Anbieters '{0}' zu streamen, ist fehlgeschlagen. Der Stream konnte nicht gelesen werden. Die Meldung lautet: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. Even after {1} retries, there were some problems with the request. The provider message is: '{2}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T2249520705"] = "Es wurde versucht, mit dem LLM-Anbieter '{0}' zu kommunizieren. Auch nach {1} Versuchen gab es Probleme mit der Anfrage. Die Nachricht des Anbieters lautet: '{2}'" + +-- Tried to communicate with the LLM provider '{0}'. Something was not found. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T2780552614"] = "Es wurde versucht, mit dem LLM-Anbieter '{0}' zu kommunizieren. Etwas wurde nicht gefunden. Die Meldung des Anbieters lautet: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. There were some problems with the request. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T3573577433"] = "Es wurde versucht, mit dem LLM-Anbieter '{0}' zu kommunizieren. Dabei sind Probleme bei der Anfrage aufgetreten. Die Meldung des Anbieters lautet: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. The server might be down or having issues. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T3806716694"] = "Es wurde versucht, mit dem LLM-Anbieter '{0}' zu kommunizieren. Der Server ist möglicherweise nicht erreichbar oder hat Probleme. Die Anbietermeldung lautet: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. The provider is overloaded. The message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T4179546180"] = "Es wurde versucht, mit dem LLM-Anbieter '{0}' zu kommunizieren. Der Anbieter ist überlastet. Die Meldung lautet: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. You might not be able to use this provider from your location. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T862369179"] = "Es wurde versucht, mit dem LLM-Anbieter '{0}' zu kommunizieren. Möglicherweise können Sie diesen Anbieter von Ihrem Standort aus nicht nutzen. Die Mitteilung des Anbieters lautet: '{1}'" + +-- The trust level of this provider **has not yet** been thoroughly **investigated and evaluated**. We do not know if your data is safe. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T1014558951"] = "Das Vertrauensniveau dieses Anbieters wurde **noch nicht** gründlich **untersucht und bewertet**. Wir wissen nicht, ob Ihre Daten sicher sind." + +-- You or your organization operate the LLM locally or within your trusted network. In terms of data processing and security, this is the best possible way. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T2124364471"] = "Sie oder Ihre Organisation betreiben das LLM lokal oder innerhalb Ihres vertrauenswürdigen Netzwerks. In Bezug auf Datenverarbeitung und Sicherheit ist dies die bestmögliche Lösung." + +-- The provider is located in the EU and is subject to the **GDPR** (General Data Protection Regulation). Additionally, the provider states that **your data is not used for training**. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3010553924"] = "Der Anbieter hat seinen Sitz in der EU und unterliegt der **DSGVO** (Datenschutz-Grundverordnung). Außerdem gibt der Anbieter an, dass **Ihre Daten nicht zum Training verwendet werden**." + +-- No provider selected. Please select a provider to get see its confidence level. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3368531176"] = "Kein Anbieter ausgewählt. Bitte wählen Sie einen Anbieter aus, um dessen Vertrauensniveau zu sehen." + +-- The provider operates its service from the USA and is subject to **US jurisdiction**. In case of suspicion, authorities in the USA can access your data. However, **your data is not used for training** purposes. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3528165925"] = "Der Anbieter betreibt seinen Dienst aus den USA und unterliegt der **US-amerikanischen Gerichtsbarkeit**. Bei Verdacht können US-Behörden auf Ihre Daten zugreifen. **Ihre Daten werden jedoch nicht für Trainingszwecke** verwendet." + +-- The provider operates its service from the USA and is subject to **U.S. jurisdiction**. In case of suspicion, authorities in the USA can access your data. Please inform yourself about the use of your data. We do not know if your data is safe. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3788466789"] = "Der Anbieter betreibt seinen Service in den USA und unterliegt der **US-amerikanischen Gerichtsbarkeit**. Im Verdachtsfall können US-Behörden auf Ihre Daten zugreifen. Bitte informieren Sie sich über die Verwendung Ihrer Daten. Wir wissen nicht, ob Ihre Daten sicher sind." + +-- The provider operates its service from China. In case of suspicion, authorities in the respective countries of operation may access your data. However, **your data is not used for training** purposes. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T991875725"] = "Der Anbieter betreibt seinen Dienst von China aus. Im Verdachtsfall können Behörden in den jeweiligen Ländern auf Ihre Daten zugreifen. **Ihre Daten werden jedoch nicht zum Trainieren** verwendet." + +-- Medium +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T163471254"] = "Mittel" + +-- Moderate +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T177463328"] = "Mäßig" + +-- Unknown confidence level +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T1811522309"] = "Unbekanntes Vertrauensniveau" + +-- No provider selected +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T2897045472"] = "Kein Anbieter ausgewählt" + +-- Low +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T2984088865"] = "Niedrig" + +-- Untrusted +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T3063224793"] = "Nicht vertrauenswürdig" + +-- High +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T3188327965"] = "Hoch" + +-- Very Low +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T786675843"] = "Sehr niedrig" + +-- Self-hosted +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T146444217"] = "Selbst gehostet" + +-- No provider selected +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T2897045472"] = "Kein Anbieter ausgewählt" + +-- Unknown +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T3424652889"] = "Unbekannt" + +-- Navigation never expands, but there are tooltips +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1095779033"] = "Die Navigation wird nie ausgeklappt, aber es gibt Tooltips" + +-- Check every day +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1112287590"] = "Täglich überprüfen" + +-- Toggle the overlay: the chat uses all the space, workspaces are temporarily shown +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1114668646"] = "Overlay umschalten: Der Chat nutzt den gesamten Platz, Arbeitsbereiche werden vorübergehend angezeigt" + +-- Sidebar is always visible: show the workspaces next to the chat all the time +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1149606444"] = "Seitenleiste ist immer sichtbar: Arbeitsbereiche werden stets neben dem Chat angezeigt" + +-- Always use the default chat provider when loading chats +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1188453609"] = "Beim Laden von Chats immer den Standard-Anbieter verwenden" + +-- Show also prototype features: these are works in progress; expect bugs and missing features +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1245257804"] = "Auch Prototyp-Funktionen anzeigen: Diese befinden sich noch in der Entwicklung; Fehler und fehlende Funktionen sind zu erwarten" + +-- No key is sending the input; you have to click the send button +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1311973034"] = "Keine Taste sendet die Eingabe; Sie müssen auf die Schaltfläche klicken, um zu senden" + +-- Navigation never expands, no tooltips; there are only icons +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1402851833"] = "Navigation wird nie erweitert, keine Tooltips; es werden nur Icons angezeigt" + +-- Store chats automatically +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1664293672"] = "Chats automatisch speichern" + +-- Once at startup +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T184455356"] = "Einmal beim Start" + +-- No automatic update checks +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1874928511"] = "Keine automatische Update-Prüfung" + +-- Always expand navigation +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1991359958"] = "Navigation immer ausklappen" + +-- Show also experimental features: these are experimental; expect bugs, missing features, many changes +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2091731959"] = "Zeige auch experimentelle Funktionen: Diese Funktionen sind experimentell; Fehler, fehlende Funktionen und viele Änderungen sind zu erwarten." + +-- Use the latest LLM provider, which was used before; use the default chat provider initially +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2128088682"] = "Den zuletzt verwendeten LLM-Anbieter verwenden; anfangs den Standard-Anbieter auswählen" + +-- Navigation expands on mouse hover +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2195945406"] = "Navigation erweitert sich, wenn sich die Maus darüber befindet" + +-- Also show features ready for release; these should be stable +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2301448762"] = "Auch Funktionen anzeigen, die bereit für die Veröffentlichung sind; diese sollten stabil sein." + +-- Check every week +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T238099712"] = "Jede Woche prüfen" + +-- Disappearing chats: delete chats older than 1 year +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2405705561"] = "Selbstlöschende Chats: lösche Chats die älter als 1 Jahr sind" + +-- Store chats manually +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2520325466"] = "Chats manuell speichern" + +-- Enter is sending the input +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2537778562"] = "Die Enter- bzw. Eingabetaste sendet die Eingabe" + +-- Not yet specified +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2566503670"] = "Noch nicht angegeben" + +-- No minimum confidence level chosen +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2828607242"] = "Kein Mindestvertrauensniveau ausgewählt" + +-- Do not specify the language +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2960082609"] = "Sprache nicht festlegen" + +-- Disappearing chats: delete chats older than 7 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2975140581"] = "Selbstlöschende Chats: lösche Chats die älter als 7 Tage sind" + +-- Always use the default chat provider for new chats +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2976921892"] = "Immer den Standard-Anbieter für neue Chats verwenden" + +-- Also show features in beta: these are almost ready for release; expect some bugs +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3061414822"] = "Auch Beta-Funktionen anzeigen: Diese sind fast fertig zur Veröffentlichung; es können jedoch noch Fehler auftreten." + +-- Check every hour +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3137986690"] = "Jede Stunde überprüfen" + +-- Disappearing chats: delete chats older than 180 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3491430707"] = "Selbstlöschende Chats: lösche Chats die älter als 180 Tage sind" + +-- Disable workspaces +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3612390107"] = "Arbeitsbereiche deaktivieren" + +-- Toggle the sidebar: show the workspaces on demand next to the chat +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3711207137"] = "Seitenleiste umschalten: Arbeitsbereiche bei Bedarf neben dem Chat anzeigen" + +-- Also show features in alpha: these are in development; expect bugs and missing features +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T4146964761"] = "Zeige auch Funktionen im Alpha-Stadium an: Diese befinden sich in der Entwicklung; es werden Fehler und fehlende Funktionen auftreten." + +-- All preview features are hidden +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T4289410063"] = "Alle Vorschaufunktionen sind ausgeblendet" + +-- When possible, use the LLM provider which was used for each chat in the first place +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T75376144"] = "Wenn möglich, verwende den LLM-Anbieter, der ursprünglich für jeden Chat verwendet wurde." + +-- Disappearing chats: no automatic maintenance; old chats will never be deleted +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T803751240"] = "Selbstlöschende Chats: keine automatische Wartung; alte Chats werden nie gelöscht" + +-- Disappearing chats: delete chats older than 90 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T869922627"] = "Selbstlöschende Chats: lösche Chats die älter als 90 Tage sind" + +-- Modifier key + enter is sending the input +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T870850829"] = "Mit gedrückter Modifikatortaste (z.B. Alt oder Strg) + Enter- bzw. Eingabe-Taste wird die Eingabe gesendet" + +-- Disappearing chats: delete chats older than 30 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T937754037"] = "Selbstlöschende Chats: lösche Chats die älter als 30 Tage sind" + +-- This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider. +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T1531417967"] = "Diese Datenquelle kann mit jedem LLM-Anbieter verwendet werden. Ihre Daten können an einen cloudbasierten Anbieter gesendet werden." + +-- This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider. +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T3187068849"] = "Diese Datenquelle kann nur mit einem selbst gehosteten LLM-Anbieter verwendet werden. Ihre Daten werden nicht an einen cloudbasierten Anbieter gesendet." + +-- Please select a security policy +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T3511915070"] = "Bitte wählen Sie eine Sicherheitsrichtlinie aus." + +-- The security of the data source is not specified yet. You cannot use this data source until you specify a security policy. +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T4056804813"] = "Die Sicherheit der Datenquelle ist noch nicht festgelegt. Sie können diese Datenquelle erst verwenden, wenn Sie eine Sicherheitsrichtlinie angeben." + +-- Unknown security policy +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T4277536697"] = "Unbekannte Sicherheitsrichtlinie" + +-- Local File +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T1687345358"] = "Lokale Datei" + +-- External ERI Server (v1) +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T3020093889"] = "Externer ERI-Server (v1)" + +-- No data source +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T810547195"] = "Keine Datenquelle" + +-- Local Directory +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T926703547"] = "Lokales Verzeichnis" + -- Unknown option UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3964902774"] = "Unbekannte Option" --- Choose the language manually. -UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3988034966"] = "Sprache manuell auswählen." +-- Choose the language manually +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3988034966"] = "Sprache manuell auswählen" + +-- Choose the language automatically, based on your system language +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T485389934"] = "Sprache automatisch anhand Ihrer Systemsprache auswählen" + +-- Writer Mode: Experiments about how to write long texts using AI +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T158702544"] = "Schreibmodus: Experimente zum Verfassen langer Texte mit KI" + +-- Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T1847148141"] = "PDF-Dateien einlesen: Vorschau unseres PDF-Lesesystems, mit dem Sie Text aus PDF-Dateien einlesen können" + +-- Plugins: Preview of our plugin system where you can extend the functionality of the app +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2056842933"] = "Plugins: Vorschau auf unser Pluginsystems, mit dem Sie die Funktionalität der App erweitern können" + +-- RAG: Preview of our RAG implementation where you can refer your files or integrate enterprise data within your company +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2708939138"] = "RAG: Vorschau auf unsere RAG-Implementierung, mit der Sie auf Ihre Dateien zugreifen oder Unternehmensdaten in Ihrem Unternehmen integrieren können" + +-- Unknown preview feature +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2722827307"] = "Unbekannte Vorschau-Funktion" + +-- Use no data sources, when sending an assistant result to a chat +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T1223925477"] = "Keine Datenquellen vorauswählen, wenn ein Ergebnis von einem Assistenten an einen neuen Chat gesendet wird" + +-- Unknown behavior +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T1394162669"] = "Unbekanntes Verhalten" + +-- Apply standard chat data source options, when sending an assistant result to a chat +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T2129722199"] = "Standard-Optionen für Datenquellen anwenden, wenn ein Ergebnis von einem Assistenten an einen neuen Chat gesendet wird" + +-- Always use dark theme +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T197192304"] = "Immer dunkles Design verwenden" + +-- Synchronized with the operating system settings +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T1987547483"] = "Mit den Einstellungen des Betriebssystems synchronisiert" + +-- Unknown setting +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T4107955313"] = "Unbekannte Einstellung" + +-- Always use light theme +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T534715610"] = "Immer das helle Design verwenden" + +-- Use no profile +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::PROFILE::T2205839602"] = "Kein Profil verwenden" + +-- SSO (Kerberos) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T268552140"] = "SSO (Kerberos)" + +-- Access Token +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T2891154022"] = "Zugangstoken" + +-- Unknown authentication method +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T3296465240"] = "Unbekannte Authentifizierungsmethode" + +-- No authentication +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T810547195"] = "Keine Authentifizierung" + +-- Username & Password +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T863358904"] = "Benutzername & Passwort" + +-- Spanish (Spain) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1269145091"] = "Spanisch (Spanien)" + +-- German (Germany) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T133055431"] = "Deutsch (Deutschland)" + +-- Other +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1849229205"] = "Andere" + +-- German (Switzerland) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1914931075"] = "Deutsch (Schweiz)" + +-- German (Austria) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1992157553"] = "Deutsch (Österreich)" + +-- Japanese (Japan) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2064802889"] = "Japanisch (Japan)" + +-- French (France) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2496010681"] = "Französisch (Frankreich)" + +-- Please select the target language +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2536245199"] = "Bitte wählen Sie die Zielsprache aus" + +-- Do not specify the language +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2960082609"] = "Sprache nicht angeben" + +-- Hindi (India) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3245596873"] = "Hindi (Indien)" + +-- Chinese (Simplified) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3441562249"] = "Chinesisch (vereinfacht)" + +-- English (US) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3729684486"] = "Englisch (US)" + +-- English (UK) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3730964414"] = "Englisch (UK)" + +-- Do not change the language +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T658789330"] = "Sprache nicht ändern" + +-- Coding Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1082499335"] = "Programmierassistent" + +-- E-Mail Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1185802704"] = "E-Mail-Assistent" + +-- My Tasks Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1546040625"] = "Meine Aufgaben-Assistent" + +-- Grammar & Spelling Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T166453786"] = "Grammatik- & Rechtschreibassistent" + +-- Legal Check Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1886447798"] = "Assistent für rechtliche Prüfungen" + +-- Job Posting Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2212811874"] = "Assistent für Stellenanzeigen" + +-- Icon Finder Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2457005512"] = "Icon Finder-Assistent" + +-- Text Summarizer Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2684676843"] = "Assistent zur Textzusammenfassung" + +-- Synonym Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2921123194"] = "Synonym-Assistent" + +-- Translation Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T3887962308"] = "Übersetzungsassistent" + +-- Agenda Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4034795997"] = "Agenda-Assistent" + +-- ERI Server +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4204533420"] = "ERI-Server" + +-- Rewrite Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4262148639"] = "Assistent zum Umformulieren & Verbessern" + +-- Localization Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T446674624"] = "Lokalisierungs-Assistent" + +-- New Chat +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T826248509"] = "Neuer Chat" + +-- Trust LLM providers from the USA +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T1748300640"] = "LLM-Anbieter aus den USA vertrauen" + +-- Configure your own confidence scheme +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T2017415465"] = "Konfigurieren Sie Ihr eigenes Vertrauensschema" + +-- Trust LLM providers from the USA and Europe +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T2498514901"] = "Vertraue LLM-Anbietern aus den USA und Europa" + +-- Unknown confidence scheme +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T292756058"] = "Unbekanntes Vertrauensschema" + +-- Trust LLM providers from Asia +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T3016210842"] = "Vertraue LLM-Anbietern aus Asien" + +-- Trust LLM providers from Europe +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T357239630"] = "Vertrauen Sie LLM-Anbietern aus Europa" + +-- Trust only self-hosted providers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T3893997203"] = "Nur selbst gehosteten LLM-Anbietern vertrauen" + +-- Trust all LLM providers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T4107860491"] = "Allen LLM-Anbietern vertrauen" + +-- The related data is not allowed to be sent to any LLM provider. This means that this data source cannot be used at the moment. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T1555790630"] = "Die zugehörigen Daten dürfen an keinen LLM-Anbieter gesendet werden. Das bedeutet, dass diese Datenquelle momentan nicht verwendet werden kann." + +-- The related data can be sent to any provider, regardless of where it is hosted (cloud or self-hosted). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T2031831095"] = "Die zugehörigen Daten können an jeden Anbieter gesendet werden, unabhängig davon, ob dieser in der Cloud oder selbst gehostet wird." + +-- The related data can be sent to a provider that is hosted by the same organization, either on-premises or locally. Cloud-based providers are not allowed. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T2943101676"] = "Die entsprechenden Daten können an einen Anbieter gesendet werden, der von derselben Organisation betrieben wird – entweder auf Ihrem Gerät oder im Unternehmens-Netzwerk. Cloud-basierte Anbieter sind nicht zulässig." + +-- Unknown configuration. This data source cannot be used at the moment. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T647911863"] = "Unbekannte Konfiguration. Diese Datenquelle kann derzeit nicht verwendet werden." + +-- Failed to execute the retrieval request: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1270753490"] = "Die Abrufanfrage konnte nicht ausgeführt werden: Die Anfrage wurde entweder vom Benutzer abgebrochen oder ist aufgrund eines Zeitlimits fehlgeschlagen." + +-- Failed to retrieve the embedding information: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1368217771"] = "Abrufen der Einbettungsinformationen fehlgeschlagen: Der ERI-Server hat keine gültige Antwort zurückgegeben." + +-- Failed to retrieve the password. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1460025425"] = "Das Passwort konnte nicht abgerufen werden." + +-- Failed to authenticate with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1741376192"] = "Authentifizierung beim ERI-Server fehlgeschlagen. Code: {0}, Grund: {1}" + +-- Failed to retrieve the security requirements: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1931074357"] = "Die Sicherheitsanforderungen konnten nicht abgerufen werden: Es gab ein Problem bei der Kommunikation mit dem ERI-Server. Code: {0}, Grund: {1}" + +-- Failed to execute the retrieval request due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1951868505"] = "Die Abrufanfrage konnte aufgrund eines Problems nicht ausgeführt werden: {0}" + +-- Failed to execute the retrieval request: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1978354870"] = "Die Abrufanfrage konnte nicht ausgeführt werden: Der ERI-Server hat keine gültige Antwort zurückgegeben." + +-- Failed to retrieve the security requirements: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T231684456"] = "Die Sicherheitsanforderungen konnten nicht abgerufen werden: Der ERI-Server hat keine gültige Antwort zurückgegeben." + +-- Failed to authenticate with the server: the response was invalid. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2332248448"] = "Authentifizierung mit dem Server fehlgeschlagen: Die Antwort war ungültig." + +-- Failed to retrieve the embedding information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2368384424"] = "Die Einbettungsinformationen konnten nicht abgerufen werden: Es gab ein Problem bei der Kommunikation mit dem ERI-Server. Code: {0}, Grund: {1}" + +-- Failed to retrieve the authentication methods: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2482165925"] = "Authentifizierungsmethoden konnten nicht abgerufen werden: Es gab ein Problem bei der Kommunikation mit dem ERI-Server. Code: {0}, Grund: {1}" + +-- The authentication method is not supported yet. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2536034936"] = "Die Authentifizierungsmethode wird noch nicht unterstützt." + +-- Failed to authenticate with the ERI server: the response was invalid. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2549452166"] = "Authentifizierung beim ERI-Server fehlgeschlagen: Die Antwort war ungültig." + +-- Failed to retrieve the retrieval information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2558778293"] = "Fehler beim Abrufen der Suchinformationen: Es gab ein Problem bei der Kommunikation mit dem ERI-Server. Code: {0}, Grund: {1}" + +-- Failed to authenticate with the ERI server: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2673501628"] = "Authentifizierung beim ERI-Server fehlgeschlagen: Die Anfrage wurde entweder vom Benutzer abgebrochen oder aufgrund eines Zeitlimits beendet." + +-- Failed to authenticate with the ERI server due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2858189239"] = "Authentifizierung beim ERI-Server aufgrund eines Problems fehlgeschlagen: {0}" + +-- Failed to retrieve the security requirements: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T286437836"] = "Die Sicherheitsanforderungen konnten nicht abgerufen werden: Die Anfrage wurde entweder vom Benutzer abgebrochen oder ist aufgrund eines Zeitüberschreitungsfehlers fehlgeschlagen." + +-- Failed to retrieve the security requirements due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3221004295"] = "Die Sicherheitsanforderungen konnten wegen eines Problems nicht abgerufen werden: {0}" + +-- Failed to retrieve the data source information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3290521480"] = "Abrufen der Datenquelleninformationen fehlgeschlagen: Es gab ein Problem bei der Kommunikation mit dem ERI-Server. Code: {0}, Grund: {1}" + +-- Failed to retrieve the data source information due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3354496288"] = "Abrufen der Datenquelleninformationen aufgrund eines Problems fehlgeschlagen: {0}" + +-- Failed to retrieve the authentication methods due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3366487415"] = "Abrufen der Authentifizierungsmethoden aufgrund eines Problems fehlgeschlagen: {0}" + +-- Failed to retrieve the authentication methods: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3654094460"] = "Abrufen der Authentifizierungsmethoden fehlgeschlagen: Die Anfrage wurde entweder vom Benutzer abgebrochen oder ist aufgrund eines Zeitlimits abgelaufen." + +-- Failed to retrieve the retrieval information: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3721797352"] = "Abrufen der Suchinformationen fehlgeschlagen: Der ERI-Server hat keine gültige Antwort zurückgegeben." + +-- Failed to retrieve the retrieval information: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3809548876"] = "Fehler beim Abrufen der Suchinformationen: Die Anfrage wurde entweder vom Benutzer abgebrochen oder ist wegen eines Zeitlimits fehlgeschlagen." + +-- Failed to retrieve the retrieval information due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3862033799"] = "Abrufen der Informationen ist aufgrund eines Problems fehlgeschlagen: {0}" + +-- Failed to retrieve the data source information: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T4006612619"] = "Fehler beim Abrufen der Datenquelleninformationen: Der ERI-Server hat keine gültige Antwort zurückgegeben." + +-- Failed to retrieve the embedding information: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T469891013"] = "Die Einbettungsinformationen konnten nicht abgerufen werden: Die Anfrage wurde entweder vom Nutzer abgebrochen oder ist wegen eines Zeitlimits fehlgeschlagen." + +-- Failed to execute the retrieval request: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T615338311"] = "Ausführen der Abrufanfrage fehlgeschlagen: Es gab ein Problem bei der Kommunikation mit dem ERI-Server. Code: {0}, Grund: {1}" + +-- Failed to retrieve the data source information: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T690733413"] = "Fehler beim Abrufen der Datenquelleninformationen: Die Anfrage wurde entweder vom Benutzer abgebrochen oder ist aufgrund eines Zeitlimits fehlgeschlagen." + +-- Failed to retrieve the embedding information due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T765050112"] = "Fehler beim Abrufen der Embedding-Informationen aufgrund einer Ausnahme: {0}" + +-- Failed to retrieve the access token. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T816853779"] = "Fehler beim Abrufen des Zugriffstokens." + +-- Failed to retrieve the authentication methods: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T984407320"] = "Fehler beim Abrufen der Authentifizierungsmethoden: Der ERI-Server hat keine gültige Antwort zurückgegeben." + +-- The table AUTHORS does not exist or is using an invalid syntax. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1068328139"] = "Die Tabelle AUTHORS existiert nicht oder verwendet eine ungültige Syntax." + +-- The field NAME does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1340447036"] = "Das Feld NAME existiert nicht oder ist keine gültige Zeichenkette." + +-- The field SOURCE_URL does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1421846488"] = "Das Feld SOURCE_URL existiert nicht oder ist keine gültige Zeichenkette." + +-- The field VERSION does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T148801541"] = "Das Feld VERSION existiert nicht oder ist keine gültige Zeichenkette." + +-- The table CATEGORIES does not exist or is using an invalid syntax. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1505723383"] = "Die Tabelle CATEGORIES existiert nicht oder verwendet eine ungültige Syntax." + +-- The table TARGET_GROUPS is empty or is not a valid table of strings. Valid target groups are: {0}. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1619769690"] = "Die Tabelle TARGET_GROUPS ist leer oder keine gültige Tabelle mit Zeichenfolgen. Gültige Zielgruppen sind: {0}." + +-- The field ID is empty. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1733171739"] = "Das Feld ID ist leer. Die ID muss im Format 8-4-4-4-12 angegeben werden (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)." + +-- The field VERSION is empty. The version number must be formatted as string in the major.minor.patch format (X.X.X). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2115845776"] = "Das Feld VERSION ist leer. Die Versionsnummer muss als Zeichenkette im Format Hauptversion.Nebenversion.Patch (X.X.X) angegeben werden." + +-- The field ID does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2203072274"] = "Das Feld ID existiert nicht oder ist keine gültige Zeichenkette." + +-- The field DESCRIPTION is empty. The description must be a non-empty string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2262604281"] = "Das Feld DESCRIPTION ist leer. Die Beschreibung muss ein nicht-leerer Text sein." + +-- The field DESCRIPTION does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T229488255"] = "Das Feld DESCRIPTION existiert nicht oder ist keine gültige Zeichenkette." + +-- The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2320984047"] = "Das Feld SOURCE_URL ist keine gültige URL. Die URL muss mit 'http://' oder 'https://' beginnen." + +-- The field VERSION is not a valid version number. The version number must be formatted as string in the major.minor.patch format (X.X.X). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2538827536"] = "Das Feld VERSION ist keine gültige Versionsnummer. Die Versionsnummer muss als Zeichenkette im Format major.minor.patch (X.X.X) angegeben werden." + +-- The table AUTHORS is empty. At least one author must be specified. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2981832540"] = "Die Tabelle AUTHORS ist leer. Es muss mindestens ein Autor angegeben werden." + +-- The field SUPPORT_CONTACT is empty. The support contact must be a non-empty string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3524814526"] = "Das Feld SUPPORT_CONTACT ist leer. Der Support-Kontakt muss eine nicht-leere Zeichenkette sein." + +-- The UI_TEXT_CONTENT table does not exist or is not a valid table. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3667396132"] = "Die Tabelle UI_TEXT_CONTENT existiert nicht oder ist keine gültige Tabelle." + +-- The field NAME is empty. The name must be a non-empty string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3763759727"] = "Das Feld NAME ist leer. Der Name darf nicht leer sein." + +-- The field DEPRECATION_MESSAGE does not exist, is not a valid string. This message is optional: use an empty string to indicate that the plugin is not deprecated. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3890922974"] = "Das Feld DEPRECATION_MESSAGE existiert nicht und ist keine gültige Zeichenkette. Diese Nachricht ist optional: Verwenden Sie eine leere Zeichenkette, um anzugeben, dass das Plugin nicht veraltet ist." + +-- The field SUPPORT_CONTACT does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T4189964941"] = "Das Feld SUPPORT_CONTACT existiert nicht oder ist keine gültige Zeichenkette." + +-- The table TARGET_GROUPS does not exist or is using an invalid syntax. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T447530369"] = "Die Tabelle TARGET_GROUPS existiert nicht oder verwendet eine ungültige Syntax." + +-- The field ID is not a valid GUID / UUID. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T471697173"] = "Das Feld ID ist keine gültige GUID/UUID. Die ID muss im 8-4-4-4-12-Format geschrieben werden (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)." + +-- The table CATEGORIES is empty. At least one category is necessary. Valid categories are: {0}. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T529114360"] = "Die Tabelle CATEGORIES ist leer. Es wird mindestens eine Kategorie benötigt. Gültige Kategorien sind: {0}." + +-- The field IS_MAINTAINED does not exist or is not a valid boolean. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T773237915"] = "Das Feld IS_MAINTAINED existiert nicht oder ist kein gültiger boolescher Wert." + +-- Writing +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1011777007"] = "Schreiben" + +-- Software Development +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1025369409"] = "Softwareentwicklung" + +-- Business +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T131837803"] = "Business" + +-- Music +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1481252212"] = "Musik" + +-- Unknown plugin category +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1585885320"] = "Unbekannte Plugin-Kategorie" + +-- Weather +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1726658099"] = "Wetter" + +-- Industry +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T208409567"] = "Industrie" + +-- Art +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2449163306"] = "Kunst" + +-- Sports +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2465108186"] = "Sport" + +-- Technology +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2499534031"] = "Technologie" + +-- Health +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2556511663"] = "Gesundheit" + +-- Utility +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2587055103"] = "Dienstprogramm" + +-- Shopping +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2704337693"] = "Einkaufen" + +-- Fitness +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2892517655"] = "Fitness" + +-- Food +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3179069417"] = "Essen" + +-- Gaming +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3246118672"] = "Spiele" + +-- News +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3421767782"] = "Nachrichten" + +-- Entertainment +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3562575449"] = "Unterhaltung" + +-- Education +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T379048501"] = "Bildung" + +-- AI Studio Core +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4005865962"] = "AI Studio Kern" + +-- Social +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4177547506"] = "Soziales" + +-- Political +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4245273692"] = "Politisch" + +-- Fiction +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T616807299"] = "Fiktion" + +-- Travel +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T745861401"] = "Reisen" + +-- None +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T810547195"] = "Keine" + +-- Party +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T850565431"] = "Party" + +-- Science +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T904504157"] = "Wissenschaft" + +-- Content Creation +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T914642375"] = "Inhalte erstellen" + +-- The field IETF_TAG does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T1796010240"] = "Das Feld IETF_TAG existiert nicht oder ist keine gültige Zeichenkette." + +-- The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T3376221777"] = "Das Feld IETF_TAG ist kein gültiges IETF-Tag. Verwenden Sie ein gültiges IETF-Tag wie 'en-US'. Der erste Teil steht für die Sprache, der zweite Teil ist der Ländercode." + +-- The field IETF_TAG is empty. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T3877047896"] = "Das Feld IETF_TAG ist leer. Verwenden Sie einen gültigen IETF-Tag wie 'de-DE'. Der erste Teil steht für die Sprache, der zweite Teil für den Ländercode." + +-- The field LANG_NAME is empty. Use a valid language name. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T4112586014"] = "Das Feld LANG_NAME ist leer. Bitte geben Sie einen gültigen Sprachennamen ein." + +-- The field LANG_NAME does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T4204700759"] = "Das Feld LANG_NAME existiert nicht oder ist keine gültige Zeichenkette." + +-- Artists +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T1142248183"] = "Künstler" + +-- Children +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T188567026"] = "Kinder" + +-- Industrial workers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T2520336817"] = "Industriearbeiter" + +-- Students +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T2905889225"] = "Studierende" + +-- Scientists +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T332785734"] = "Wissenschaftler" + +-- Adults +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3335941460"] = "Erwachsene" + +-- No target group +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3644477204"] = "Keine Zielgruppe" + +-- Business professionals +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3670621687"] = "Geschäftsleute" + +-- Teenagers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3696960735"] = "Teenager" + +-- Unknown target group +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T384321997"] = "Unbekannte Zielgruppe" + +-- Office workers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3873911022"] = "Büroangestellte" + +-- Teachers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T48460338"] = "Lehrkräfte" + +-- Everyone +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T622959000"] = "Jeder" + +-- Software developers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T831424531"] = "Softwareentwickler" + +-- Theme plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T1682350097"] = "Theme-Plugin" + +-- Unknown plugin type +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2313808600"] = "Unbekannter Plugin-Typ" + +-- Assistant plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2321563994"] = "Assistenten-Plugin" + +-- Language plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2370593926"] = "Sprach-Plugin" + +-- Configuration plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T3353383632"] = "Konfigurations-Plugin" + +-- Standard augmentation process +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::AUGMENTATIONPROCESSES::AUGMENTATIONONE::T1072508429"] = "Standardmäßiger Erweiterungsprozess" + +-- This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::AUGMENTATIONPROCESSES::AUGMENTATIONONE::T3240406069"] = "Dies ist der Standard-Erweiterungsprozess, bei dem alle abgerufenen Kontexte verwendet werden, um den Chatverlauf zu ergänzen." + +-- Automatic AI data source selection with heuristik source reduction +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::DATASOURCESELECTIONPROCESSES::AGENTICSRCSELWITHDYNHEUR::T2339257645"] = "Automatische Auswahl der Datenquellen mittels KI und mit heuristischer Datenquellen-Reduktion" + +-- Automatically selects the appropriate data sources based on the last prompt. Applies a heuristic reduction at the end to reduce the number of data sources. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::DATASOURCESELECTIONPROCESSES::AGENTICSRCSELWITHDYNHEUR::T648937779"] = "Wählt automatisch die passenden Datenquellen basierend auf der letzten Eingabe aus. Wendet am Ende eine heuristische Reduzierung an, um die Anzahl der Datenquellen zu verringern." + +-- This RAG process filters data sources, automatically selects appropriate sources, optionally allows manual source selection, retrieves data, and automatically validates the retrieval context. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T3047786484"] = "Dieser RAG-Prozess filtert Datenquellen, wählt automatisch passende Quellen aus, ermöglicht optional die manuelle Auswahl von Quellen, ruft Daten ab und überprüft den Abrufkontext automatisch." + +-- AI-based data source selection with AI retrieval context validation +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T3775725978"] = "KI-basierte Datenquellen-Auswahl mit Validierung des Abrufkontexts" + +-- PDF Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T3108466742"] = "PDF-Dateien" + +-- All Image Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T4086723714"] = "Alle Bilddateien" + +-- Text Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T639143005"] = "Textdateien" + +-- All Office Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T709668067"] = "Alle Office-Dateien" + +-- Failed to delete the API key due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::APIKEYS::T3658273365"] = "Das API-Schlüssel konnte aufgrund eines API-Problems nicht gelöscht werden." + +-- Failed to get the API key due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::APIKEYS::T3875720022"] = "Der API-Schlüssel konnte aufgrund eines API-Problems nicht abgerufen werden." + +-- Successfully copied the text to your clipboard +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::CLIPBOARD::T3351807428"] = "Der Text wurde erfolgreich in die Zwischenablage kopiert." + +-- Failed to copy the text to your clipboard. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::CLIPBOARD::T3724548108"] = "Der Text konnte nicht in die Zwischenablage kopiert werden." + +-- Failed to delete the secret data due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T2303057928"] = "Das Löschen der geheimen Daten ist aufgrund eines API-Problems fehlgeschlagen." + +-- Failed to get the secret data due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T4007657575"] = "Abrufen der geheimen Daten aufgrund eines API-Problems fehlgeschlagen." + +-- No update found. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T1015418291"] = "Kein Update gefunden." + +-- The hostname is not a valid HTTP(S) URL. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1013354736"] = "Der Hostname ist keine gültige HTTP(S)-URL." + +-- The connection test failed. Please check the connection settings. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T132896331"] = "Der Verbindungstest ist fehlgeschlagen. Bitte überprüfe die Verbindungseinstellungen." + +-- Please select an embedding provider. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1461238528"] = "Bitte wählen Sie einen Embedding-Anbieter aus." + +-- The file does not exist. Please select a valid file. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T148464502"] = "Die Datei existiert nicht. Bitte wähle eine gültige Datei aus." + +-- Please select one retrieval process. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1515898234"] = "Bitte wählen Sie einen Abrufprozess aus." + +-- This data source can only be used with a self-hosted LLM provider. Please change the security policy. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1728967730"] = "Diese Datenquelle kann nur mit einem selbst gehosteten LLM-Anbieter verwendet werden. Bitte ändern Sie die Sicherheitsrichtlinie." + +-- The username must not be empty. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1829419906"] = "Der Benutzername darf nicht leer sein." + +-- The hostname must start with either http:// or https:// +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T193387467"] = "Der Hostname muss mit entweder http:// oder https:// beginnen." + +-- Please enter a hostname, e.g., http://localhost +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1990396672"] = "Bitte geben Sie einen Hostnamen ein, z. B. http://localhost" + +-- Please select one valid authentication method. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2025964684"] = "Bitte wählen Sie eine gültige Authentifizierungsmethode aus." + +-- The name must not exceed 40 characters. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2160507967"] = "Der Name darf maximal 40 Zeichen lang sein." + +-- Please select your security policy. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2250909198"] = "Bitte wählen Sie Ihre Sicherheitsrichtlinie aus." + +-- Please test the connection before saving. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T285470497"] = "Bitte testen Sie die Verbindung, bevor Sie speichern." + +-- Please enter your secure access token. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3086932434"] = "Bitte geben Sie Ihren sicheren Zugangstoken ein." + +-- The path does not exist. Please select a valid directory. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3146272446"] = "Der Pfad existiert nicht. Bitte wählen Sie ein gültiges Verzeichnis aus." + +-- The path must not be empty. Please select a directory. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3202118305"] = "Der Pfad darf nicht leer sein. Bitte wählen Sie ein Verzeichnis aus." + +-- The name must not be empty. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3243861903"] = "Der Name darf nicht leer sein." + +-- Please enter your password. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3888492477"] = "Bitte geben Sie Ihr Passwort ein." + +-- The port must be between 1 and 65535. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3965971107"] = "Der Port muss zwischen 1 und 65535 liegen." + +-- The name is already used by another data source. Please choose a different name. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T4001510395"] = "Der Name wird bereits von einer anderen Datenquelle verwendet. Bitte wählen Sie einen anderen Namen." + +-- Please acknowledge that you are aware of the cloud embedding implications. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T490875633"] = "Bitte bestätigen Sie, dass Ihnen die Auswirkungen der Cloud-Einbettung bewusst sind." + +-- The file path must not be empty. Please select a file. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T878007824"] = "Der Dateipfad darf nicht leer sein. Bitte wählen Sie eine Datei aus." + +-- Please enter the secret necessary for authentication. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T968385876"] = "Bitte geben Sie das für die Authentifizierung benötigte Geheimnis ein." + +-- The hostname is not a valid HTTP(S) URL. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1013354736"] = "Der Hostname ist keine gültige HTTP(S)-URL." + +-- The instance name must not exceed 40 characters. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1117188308"] = "Der Instanzname darf nicht länger als 40 Zeichen sein." + +-- Please enter a hostname, e.g., http://localhost:1234 +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T125334762"] = "Bitte geben Sie einen Hostnamen ein, z. B. http://localhost:1234" + +-- The instance name must be unique; the chosen name is already in use. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1301966140"] = "Der Instanzname muss eindeutig sein; der gewählte Name wird bereits verwendet." + +-- Please select a provider. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1809312323"] = "Bitte wählen Sie einen Anbieter aus." + +-- The hostname must start with either http:// or https:// +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T193387467"] = "Der Hostname muss mit http:// oder https:// beginnen." + +-- Please select a host. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T2257097222"] = "Bitte wählen Sie einen Host aus." + +-- Please enter an API key. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T3550629491"] = "Bitte geben Sie einen API-Schlüssel ein." + +-- Please enter an instance name. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T3999823516"] = "Bitte geben Sie einen Instanznamen ein." + +-- Please select an Hugging Face inference provider. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T497939286"] = "Bitte wählen Sie einen Hugging Face-Inferenzanbieter aus." + +-- Please select a model. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T818893091"] = "Bitte wählen Sie ein Modell aus." + +-- Delete Chat +UI_TEXT_CONTENT["AISTUDIO::TOOLS::WORKSPACEBEHAVIOUR::T2244038752"] = "Chat löschen" --- Choose the language automatically, based on your system language. -UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T485389934"] = "Sprache automatisch anhand Ihrer Systemsprache auswählen." diff --git a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua index d20f9b13..e8aba39b 100644 --- a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua @@ -135,6 +135,21 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::ASSISTANTEMAIL::T759263763"] = "De -- Please select a target language for the e-mail. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::ASSISTANTEMAIL::T891073054"] = "Please select a target language for the e-mail." +-- Personal +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T1851428013"] = "Personal" + +-- Academic +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T2055733914"] = "Academic" + +-- Business informal +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T4031465193"] = "Business informal" + +-- Business formal +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T477550214"] = "Business formal" + +-- Not specified +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T641241064"] = "Not specified" + -- Please provide a text as input. You might copy the desired text from a document or a website. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::GRAMMARSPELLING::ASSISTANTGRAMMARSPELLING::T137304886"] = "Please provide a text as input. You might copy the desired text from a document or a website." @@ -258,6 +273,48 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::ASSISTANTREWRITEIMPROVE:: -- Please provide a custom language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::ASSISTANTREWRITEIMPROVE::T656744944"] = "Please provide a custom language." +-- Passive voice +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T132535068"] = "Passive voice" + +-- Active voice +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T3548001825"] = "Active voice" + +-- Not Specified +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T4281286216"] = "Not Specified" + +-- Scientific (scientific papers, research reports) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1488581017"] = "Scientific (scientific papers, research reports)" + +-- Technical (manuals, documentation) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1577933546"] = "Technical (manuals, documentation)" + +-- Changelog (release notes, version history) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1755311660"] = "Changelog (release notes, version history)" + +-- Literary (fiction, poetry) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1823468337"] = "Literary (fiction, poetry)" + +-- Journalistic (magazines, newspapers, news) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T302304243"] = "Journalistic (magazines, newspapers, news)" + +-- Everyday (personal texts, social media) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3607558508"] = "Everyday (personal texts, social media)" + +-- Business (business emails, reports, presentations) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3674741297"] = "Business (business emails, reports, presentations)" + +-- Legal (legal texts, contracts) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3749505397"] = "Legal (legal texts, contracts)" + +-- Academic (essays, seminar papers) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T4090727535"] = "Academic (essays, seminar papers)" + +-- Not specified +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T641241064"] = "Not specified" + +-- Marketing (advertisements, sales texts) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T945714286"] = "Marketing (advertisements, sales texts)" + -- Your word or phrase UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::SYNONYM::ASSISTANTSYNONYMS::T1847246020"] = "Your word or phrase" @@ -318,6 +375,27 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::ASSISTANTTEXTSUMMARIZER:: -- Your expertise UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::ASSISTANTTEXTSUMMARIZER::T970222193"] = "Your expertise" +-- No change in complexity +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T1001090711"] = "No change in complexity" + +-- Teen language, e.g., for teenagers +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T1177455058"] = "Teen language, e.g., for teenagers" + +-- Scientific language for experts in this field +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T2687197281"] = "Scientific language for experts in this field" + +-- Scientific language for experts from other fields (interdisciplinary) +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T2931193867"] = "Scientific language for experts from other fields (interdisciplinary)" + +-- Popular science language, e.g., for people interested in science +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T3161914110"] = "Popular science language, e.g., for people interested in science" + +-- Everyday language, e.g., for adults +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T3382050522"] = "Everyday language, e.g., for adults" + +-- Simple language, e.g., for children +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T530584375"] = "Simple language, e.g., for children" + -- Please select a target language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TRANSLATION::ASSISTANTTRANSLATION::T1173859091"] = "Please select a target language." @@ -435,8 +513,8 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T3403290862"] = "The selec -- Select a provider first UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T3654197869"] = "Select a provider first" --- Start temporary chat -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T4113970938"] = "Start temporary chat" +-- New disappearing chat +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T4113970938"] = "New disappearing chat" -- Please select the workspace where you want to move the chat to. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T474393241"] = "Please select the workspace where you want to move the chat to." @@ -1242,6 +1320,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T2842060373"] = "Instance Na -- Show available models UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T3763891899"] = "Show available models" +-- Model selection +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T416738168"] = "Model selection" + -- Host UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T808120719"] = "Host" @@ -2061,7 +2142,7 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2864211629"] = "Please wait for -- Supporters UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2929332068"] = "Supporters" --- Writer +-- Writing UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2979224202"] = "Writing" -- Show details @@ -2532,12 +2613,887 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T3948127789"] = "Suggestion" -- Your stage directions UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T779923726"] = "Your stage directions" +-- Tried to communicate with the LLM provider '{0}'. The API key might be invalid. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1073493061"] = "Tried to communicate with the LLM provider '{0}'. The API key might be invalid. The provider message is: '{1}'" + +-- Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1487597412"] = "Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. The required message format might be changed. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1674355816"] = "Tried to communicate with the LLM provider '{0}'. The required message format might be changed. The provider message is: '{1}'" + +-- Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1856278860"] = "Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. Even after {1} retries, there were some problems with the request. The provider message is: '{2}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T2249520705"] = "Tried to communicate with the LLM provider '{0}'. Even after {1} retries, there were some problems with the request. The provider message is: '{2}'" + +-- Tried to communicate with the LLM provider '{0}'. Something was not found. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T2780552614"] = "Tried to communicate with the LLM provider '{0}'. Something was not found. The provider message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. There were some problems with the request. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T3573577433"] = "Tried to communicate with the LLM provider '{0}'. There were some problems with the request. The provider message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. The server might be down or having issues. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T3806716694"] = "Tried to communicate with the LLM provider '{0}'. The server might be down or having issues. The provider message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. The provider is overloaded. The message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T4179546180"] = "Tried to communicate with the LLM provider '{0}'. The provider is overloaded. The message is: '{1}'" + +-- Tried to communicate with the LLM provider '{0}'. You might not be able to use this provider from your location. The provider message is: '{1}' +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T862369179"] = "Tried to communicate with the LLM provider '{0}'. You might not be able to use this provider from your location. The provider message is: '{1}'" + +-- The trust level of this provider **has not yet** been thoroughly **investigated and evaluated**. We do not know if your data is safe. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T1014558951"] = "The trust level of this provider **has not yet** been thoroughly **investigated and evaluated**. We do not know if your data is safe." + +-- You or your organization operate the LLM locally or within your trusted network. In terms of data processing and security, this is the best possible way. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T2124364471"] = "You or your organization operate the LLM locally or within your trusted network. In terms of data processing and security, this is the best possible way." + +-- The provider is located in the EU and is subject to the **GDPR** (General Data Protection Regulation). Additionally, the provider states that **your data is not used for training**. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3010553924"] = "The provider is located in the EU and is subject to the **GDPR** (General Data Protection Regulation). Additionally, the provider states that **your data is not used for training**." + +-- No provider selected. Please select a provider to get see its confidence level. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3368531176"] = "No provider selected. Please select a provider to get see its confidence level." + +-- The provider operates its service from the USA and is subject to **US jurisdiction**. In case of suspicion, authorities in the USA can access your data. However, **your data is not used for training** purposes. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3528165925"] = "The provider operates its service from the USA and is subject to **US jurisdiction**. In case of suspicion, authorities in the USA can access your data. However, **your data is not used for training** purposes." + +-- The provider operates its service from the USA and is subject to **U.S. jurisdiction**. In case of suspicion, authorities in the USA can access your data. Please inform yourself about the use of your data. We do not know if your data is safe. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3788466789"] = "The provider operates its service from the USA and is subject to **U.S. jurisdiction**. In case of suspicion, authorities in the USA can access your data. Please inform yourself about the use of your data. We do not know if your data is safe." + +-- The provider operates its service from China. In case of suspicion, authorities in the respective countries of operation may access your data. However, **your data is not used for training** purposes. +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T991875725"] = "The provider operates its service from China. In case of suspicion, authorities in the respective countries of operation may access your data. However, **your data is not used for training** purposes." + +-- Medium +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T163471254"] = "Medium" + +-- Moderate +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T177463328"] = "Moderate" + +-- Unknown confidence level +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T1811522309"] = "Unknown confidence level" + +-- No provider selected +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T2897045472"] = "No provider selected" + +-- Low +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T2984088865"] = "Low" + +-- Untrusted +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T3063224793"] = "Untrusted" + +-- High +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T3188327965"] = "High" + +-- Very Low +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T786675843"] = "Very Low" + +-- Self-hosted +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T146444217"] = "Self-hosted" + +-- No provider selected +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T2897045472"] = "No provider selected" + +-- Unknown +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T3424652889"] = "Unknown" + +-- Navigation never expands, but there are tooltips +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1095779033"] = "Navigation never expands, but there are tooltips" + +-- Check every day +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1112287590"] = "Check every day" + +-- Toggle the overlay: the chat uses all the space, workspaces are temporarily shown +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1114668646"] = "Toggle the overlay: the chat uses all the space, workspaces are temporarily shown" + +-- Sidebar is always visible: show the workspaces next to the chat all the time +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1149606444"] = "Sidebar is always visible: show the workspaces next to the chat all the time" + +-- Always use the default chat provider when loading chats +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1188453609"] = "Always use the default chat provider when loading chats" + +-- Show also prototype features: these are works in progress; expect bugs and missing features +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1245257804"] = "Show also prototype features: these are works in progress; expect bugs and missing features" + +-- No key is sending the input; you have to click the send button +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1311973034"] = "No key is sending the input; you have to click the send button" + +-- Navigation never expands, no tooltips; there are only icons +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1402851833"] = "Navigation never expands, no tooltips; there are only icons" + +-- Store chats automatically +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1664293672"] = "Store chats automatically" + +-- Once at startup +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T184455356"] = "Once at startup" + +-- No automatic update checks +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1874928511"] = "No automatic update checks" + +-- Always expand navigation +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1991359958"] = "Always expand navigation" + +-- Show also experimental features: these are experimental; expect bugs, missing features, many changes +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2091731959"] = "Show also experimental features: these are experimental; expect bugs, missing features, many changes" + +-- Use the latest LLM provider, which was used before; use the default chat provider initially +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2128088682"] = "Use the latest LLM provider, which was used before; use the default chat provider initially" + +-- Navigation expands on mouse hover +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2195945406"] = "Navigation expands on mouse hover" + +-- Also show features ready for release; these should be stable +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2301448762"] = "Also show features ready for release; these should be stable" + +-- Check every week +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T238099712"] = "Check every week" + +-- Disappearing chats: delete chats older than 1 year +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2405705561"] = "Disappearing chats: delete chats older than 1 year" + +-- Store chats manually +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2520325466"] = "Store chats manually" + +-- Enter is sending the input +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2537778562"] = "Enter is sending the input" + +-- Not yet specified +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2566503670"] = "Not yet specified" + +-- No minimum confidence level chosen +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2828607242"] = "No minimum confidence level chosen" + +-- Do not specify the language +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2960082609"] = "Do not specify the language" + +-- Disappearing chats: delete chats older than 7 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2975140581"] = "Disappearing chats: delete chats older than 7 days" + +-- Always use the default chat provider for new chats +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2976921892"] = "Always use the default chat provider for new chats" + +-- Also show features in beta: these are almost ready for release; expect some bugs +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3061414822"] = "Also show features in beta: these are almost ready for release; expect some bugs" + +-- Check every hour +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3137986690"] = "Check every hour" + +-- Disappearing chats: delete chats older than 180 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3491430707"] = "Disappearing chats: delete chats older than 180 days" + +-- Disable workspaces +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3612390107"] = "Disable workspaces" + +-- Toggle the sidebar: show the workspaces on demand next to the chat +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3711207137"] = "Toggle the sidebar: show the workspaces on demand next to the chat" + +-- Also show features in alpha: these are in development; expect bugs and missing features +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T4146964761"] = "Also show features in alpha: these are in development; expect bugs and missing features" + +-- All preview features are hidden +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T4289410063"] = "All preview features are hidden" + +-- When possible, use the LLM provider which was used for each chat in the first place +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T75376144"] = "When possible, use the LLM provider which was used for each chat in the first place" + +-- Disappearing chats: no automatic maintenance; old chats will never be deleted +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T803751240"] = "Disappearing chats: no automatic maintenance; old chats will never be deleted" + +-- Disappearing chats: delete chats older than 90 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T869922627"] = "Disappearing chats: delete chats older than 90 days" + +-- Modifier key + enter is sending the input +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T870850829"] = "Modifier key + enter is sending the input" + +-- Disappearing chats: delete chats older than 30 days +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T937754037"] = "Disappearing chats: delete chats older than 30 days" + +-- This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider. +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T1531417967"] = "This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider." + +-- This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider. +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T3187068849"] = "This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider." + +-- Please select a security policy +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T3511915070"] = "Please select a security policy" + +-- The security of the data source is not specified yet. You cannot use this data source until you specify a security policy. +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T4056804813"] = "The security of the data source is not specified yet. You cannot use this data source until you specify a security policy." + +-- Unknown security policy +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T4277536697"] = "Unknown security policy" + +-- Local File +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T1687345358"] = "Local File" + +-- External ERI Server (v1) +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T3020093889"] = "External ERI Server (v1)" + +-- No data source +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T810547195"] = "No data source" + +-- Local Directory +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T926703547"] = "Local Directory" + -- Unknown option UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3964902774"] = "Unknown option" --- Choose the language manually. -UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3988034966"] = "Choose the language manually." +-- Choose the language manually +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3988034966"] = "Choose the language manually" --- Choose the language automatically, based on your system language. -UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T485389934"] = "Choose the language automatically, based on your system language." +-- Choose the language automatically, based on your system language +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T485389934"] = "Choose the language automatically, based on your system language" +-- Writer Mode: Experiments about how to write long texts using AI +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T158702544"] = "Writer Mode: Experiments about how to write long texts using AI" + +-- Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T1847148141"] = "Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files" + +-- Plugins: Preview of our plugin system where you can extend the functionality of the app +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2056842933"] = "Plugins: Preview of our plugin system where you can extend the functionality of the app" + +-- RAG: Preview of our RAG implementation where you can refer your files or integrate enterprise data within your company +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2708939138"] = "RAG: Preview of our RAG implementation where you can refer your files or integrate enterprise data within your company" + +-- Unknown preview feature +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2722827307"] = "Unknown preview feature" + +-- Use no data sources, when sending an assistant result to a chat +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T1223925477"] = "Use no data sources, when sending an assistant result to a chat" + +-- Unknown behavior +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T1394162669"] = "Unknown behavior" + +-- Apply standard chat data source options, when sending an assistant result to a chat +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T2129722199"] = "Apply standard chat data source options, when sending an assistant result to a chat" + +-- Always use dark theme +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T197192304"] = "Always use dark theme" + +-- Synchronized with the operating system settings +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T1987547483"] = "Synchronized with the operating system settings" + +-- Unknown setting +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T4107955313"] = "Unknown setting" + +-- Always use light theme +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T534715610"] = "Always use light theme" + +-- Use no profile +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::PROFILE::T2205839602"] = "Use no profile" + +-- SSO (Kerberos) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T268552140"] = "SSO (Kerberos)" + +-- Access Token +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T2891154022"] = "Access Token" + +-- Unknown authentication method +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T3296465240"] = "Unknown authentication method" + +-- No authentication +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T810547195"] = "No authentication" + +-- Username & Password +UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T863358904"] = "Username & Password" + +-- Spanish (Spain) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1269145091"] = "Spanish (Spain)" + +-- German (Germany) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T133055431"] = "German (Germany)" + +-- Other +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1849229205"] = "Other" + +-- German (Switzerland) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1914931075"] = "German (Switzerland)" + +-- German (Austria) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1992157553"] = "German (Austria)" + +-- Japanese (Japan) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2064802889"] = "Japanese (Japan)" + +-- French (France) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2496010681"] = "French (France)" + +-- Please select the target language +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2536245199"] = "Please select the target language" + +-- Do not specify the language +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2960082609"] = "Do not specify the language" + +-- Hindi (India) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3245596873"] = "Hindi (India)" + +-- Chinese (Simplified) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3441562249"] = "Chinese (Simplified)" + +-- English (US) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3729684486"] = "English (US)" + +-- English (UK) +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3730964414"] = "English (UK)" + +-- Do not change the language +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T658789330"] = "Do not change the language" + +-- Coding Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1082499335"] = "Coding Assistant" + +-- E-Mail Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1185802704"] = "E-Mail Assistant" + +-- My Tasks Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1546040625"] = "My Tasks Assistant" + +-- Grammar & Spelling Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T166453786"] = "Grammar & Spelling Assistant" + +-- Legal Check Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1886447798"] = "Legal Check Assistant" + +-- Job Posting Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2212811874"] = "Job Posting Assistant" + +-- Icon Finder Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2457005512"] = "Icon Finder Assistant" + +-- Text Summarizer Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2684676843"] = "Text Summarizer Assistant" + +-- Synonym Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2921123194"] = "Synonym Assistant" + +-- Translation Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T3887962308"] = "Translation Assistant" + +-- Agenda Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4034795997"] = "Agenda Assistant" + +-- ERI Server +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4204533420"] = "ERI Server" + +-- Rewrite Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4262148639"] = "Rewrite Assistant" + +-- Localization Assistant +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T446674624"] = "Localization Assistant" + +-- New Chat +UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T826248509"] = "New Chat" + +-- Trust LLM providers from the USA +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T1748300640"] = "Trust LLM providers from the USA" + +-- Configure your own confidence scheme +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T2017415465"] = "Configure your own confidence scheme" + +-- Trust LLM providers from the USA and Europe +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T2498514901"] = "Trust LLM providers from the USA and Europe" + +-- Unknown confidence scheme +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T292756058"] = "Unknown confidence scheme" + +-- Trust LLM providers from Asia +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T3016210842"] = "Trust LLM providers from Asia" + +-- Trust LLM providers from Europe +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T357239630"] = "Trust LLM providers from Europe" + +-- Trust only self-hosted providers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T3893997203"] = "Trust only self-hosted providers" + +-- Trust all LLM providers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T4107860491"] = "Trust all LLM providers" + +-- The related data is not allowed to be sent to any LLM provider. This means that this data source cannot be used at the moment. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T1555790630"] = "The related data is not allowed to be sent to any LLM provider. This means that this data source cannot be used at the moment." + +-- The related data can be sent to any provider, regardless of where it is hosted (cloud or self-hosted). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T2031831095"] = "The related data can be sent to any provider, regardless of where it is hosted (cloud or self-hosted)." + +-- The related data can be sent to a provider that is hosted by the same organization, either on-premises or locally. Cloud-based providers are not allowed. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T2943101676"] = "The related data can be sent to a provider that is hosted by the same organization, either on-premises or locally. Cloud-based providers are not allowed." + +-- Unknown configuration. This data source cannot be used at the moment. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T647911863"] = "Unknown configuration. This data source cannot be used at the moment." + +-- Failed to execute the retrieval request: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1270753490"] = "Failed to execute the retrieval request: the request was canceled either by the user or due to a timeout." + +-- Failed to retrieve the embedding information: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1368217771"] = "Failed to retrieve the embedding information: the ERI server did not return a valid response." + +-- Failed to retrieve the password. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1460025425"] = "Failed to retrieve the password." + +-- Failed to authenticate with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1741376192"] = "Failed to authenticate with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to retrieve the security requirements: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1931074357"] = "Failed to retrieve the security requirements: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to execute the retrieval request due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1951868505"] = "Failed to execute the retrieval request due to an exception: {0}" + +-- Failed to execute the retrieval request: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1978354870"] = "Failed to execute the retrieval request: the ERI server did not return a valid response." + +-- Failed to retrieve the security requirements: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T231684456"] = "Failed to retrieve the security requirements: the ERI server did not return a valid response." + +-- Failed to authenticate with the server: the response was invalid. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2332248448"] = "Failed to authenticate with the server: the response was invalid." + +-- Failed to retrieve the embedding information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2368384424"] = "Failed to retrieve the embedding information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to retrieve the authentication methods: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2482165925"] = "Failed to retrieve the authentication methods: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- The authentication method is not supported yet. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2536034936"] = "The authentication method is not supported yet." + +-- Failed to authenticate with the ERI server: the response was invalid. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2549452166"] = "Failed to authenticate with the ERI server: the response was invalid." + +-- Failed to retrieve the retrieval information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2558778293"] = "Failed to retrieve the retrieval information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to authenticate with the ERI server: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2673501628"] = "Failed to authenticate with the ERI server: the request was canceled either by the user or due to a timeout." + +-- Failed to authenticate with the ERI server due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2858189239"] = "Failed to authenticate with the ERI server due to an exception: {0}" + +-- Failed to retrieve the security requirements: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T286437836"] = "Failed to retrieve the security requirements: the request was canceled either by the user or due to a timeout." + +-- Failed to retrieve the security requirements due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3221004295"] = "Failed to retrieve the security requirements due to an exception: {0}" + +-- Failed to retrieve the data source information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3290521480"] = "Failed to retrieve the data source information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to retrieve the data source information due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3354496288"] = "Failed to retrieve the data source information due to an exception: {0}" + +-- Failed to retrieve the authentication methods due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3366487415"] = "Failed to retrieve the authentication methods due to an exception: {0}" + +-- Failed to retrieve the authentication methods: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3654094460"] = "Failed to retrieve the authentication methods: the request was canceled either by the user or due to a timeout." + +-- Failed to retrieve the retrieval information: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3721797352"] = "Failed to retrieve the retrieval information: the ERI server did not return a valid response." + +-- Failed to retrieve the retrieval information: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3809548876"] = "Failed to retrieve the retrieval information: the request was canceled either by the user or due to a timeout." + +-- Failed to retrieve the retrieval information due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3862033799"] = "Failed to retrieve the retrieval information due to an exception: {0}" + +-- Failed to retrieve the data source information: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T4006612619"] = "Failed to retrieve the data source information: the ERI server did not return a valid response." + +-- Failed to retrieve the embedding information: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T469891013"] = "Failed to retrieve the embedding information: the request was canceled either by the user or due to a timeout." + +-- Failed to execute the retrieval request: there was an issue communicating with the ERI server. Code: {0}, Reason: {1} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T615338311"] = "Failed to execute the retrieval request: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}" + +-- Failed to retrieve the data source information: the request was canceled either by the user or due to a timeout. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T690733413"] = "Failed to retrieve the data source information: the request was canceled either by the user or due to a timeout." + +-- Failed to retrieve the embedding information due to an exception: {0} +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T765050112"] = "Failed to retrieve the embedding information due to an exception: {0}" + +-- Failed to retrieve the access token. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T816853779"] = "Failed to retrieve the access token." + +-- Failed to retrieve the authentication methods: the ERI server did not return a valid response. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T984407320"] = "Failed to retrieve the authentication methods: the ERI server did not return a valid response." + +-- The table AUTHORS does not exist or is using an invalid syntax. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1068328139"] = "The table AUTHORS does not exist or is using an invalid syntax." + +-- The field NAME does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1340447036"] = "The field NAME does not exist or is not a valid string." + +-- The field SOURCE_URL does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1421846488"] = "The field SOURCE_URL does not exist or is not a valid string." + +-- The field VERSION does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T148801541"] = "The field VERSION does not exist or is not a valid string." + +-- The table CATEGORIES does not exist or is using an invalid syntax. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1505723383"] = "The table CATEGORIES does not exist or is using an invalid syntax." + +-- The table TARGET_GROUPS is empty or is not a valid table of strings. Valid target groups are: {0}. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1619769690"] = "The table TARGET_GROUPS is empty or is not a valid table of strings. Valid target groups are: {0}." + +-- The field ID is empty. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1733171739"] = "The field ID is empty. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)." + +-- The field VERSION is empty. The version number must be formatted as string in the major.minor.patch format (X.X.X). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2115845776"] = "The field VERSION is empty. The version number must be formatted as string in the major.minor.patch format (X.X.X)." + +-- The field ID does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2203072274"] = "The field ID does not exist or is not a valid string." + +-- The field DESCRIPTION is empty. The description must be a non-empty string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2262604281"] = "The field DESCRIPTION is empty. The description must be a non-empty string." + +-- The field DESCRIPTION does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T229488255"] = "The field DESCRIPTION does not exist or is not a valid string." + +-- The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2320984047"] = "The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'." + +-- The field VERSION is not a valid version number. The version number must be formatted as string in the major.minor.patch format (X.X.X). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2538827536"] = "The field VERSION is not a valid version number. The version number must be formatted as string in the major.minor.patch format (X.X.X)." + +-- The table AUTHORS is empty. At least one author must be specified. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2981832540"] = "The table AUTHORS is empty. At least one author must be specified." + +-- The field SUPPORT_CONTACT is empty. The support contact must be a non-empty string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3524814526"] = "The field SUPPORT_CONTACT is empty. The support contact must be a non-empty string." + +-- The UI_TEXT_CONTENT table does not exist or is not a valid table. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3667396132"] = "The UI_TEXT_CONTENT table does not exist or is not a valid table." + +-- The field NAME is empty. The name must be a non-empty string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3763759727"] = "The field NAME is empty. The name must be a non-empty string." + +-- The field DEPRECATION_MESSAGE does not exist, is not a valid string. This message is optional: use an empty string to indicate that the plugin is not deprecated. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3890922974"] = "The field DEPRECATION_MESSAGE does not exist, is not a valid string. This message is optional: use an empty string to indicate that the plugin is not deprecated." + +-- The field SUPPORT_CONTACT does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T4189964941"] = "The field SUPPORT_CONTACT does not exist or is not a valid string." + +-- The table TARGET_GROUPS does not exist or is using an invalid syntax. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T447530369"] = "The table TARGET_GROUPS does not exist or is using an invalid syntax." + +-- The field ID is not a valid GUID / UUID. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX). +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T471697173"] = "The field ID is not a valid GUID / UUID. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)." + +-- The table CATEGORIES is empty. At least one category is necessary. Valid categories are: {0}. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T529114360"] = "The table CATEGORIES is empty. At least one category is necessary. Valid categories are: {0}." + +-- The field IS_MAINTAINED does not exist or is not a valid boolean. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T773237915"] = "The field IS_MAINTAINED does not exist or is not a valid boolean." + +-- Writing +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1011777007"] = "Writing" + +-- Software Development +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1025369409"] = "Software Development" + +-- Business +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T131837803"] = "Business" + +-- Music +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1481252212"] = "Music" + +-- Unknown plugin category +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1585885320"] = "Unknown plugin category" + +-- Weather +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1726658099"] = "Weather" + +-- Industry +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T208409567"] = "Industry" + +-- Art +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2449163306"] = "Art" + +-- Sports +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2465108186"] = "Sports" + +-- Technology +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2499534031"] = "Technology" + +-- Health +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2556511663"] = "Health" + +-- Utility +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2587055103"] = "Utility" + +-- Shopping +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2704337693"] = "Shopping" + +-- Fitness +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2892517655"] = "Fitness" + +-- Food +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3179069417"] = "Food" + +-- Gaming +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3246118672"] = "Gaming" + +-- News +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3421767782"] = "News" + +-- Entertainment +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3562575449"] = "Entertainment" + +-- Education +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T379048501"] = "Education" + +-- AI Studio Core +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4005865962"] = "AI Studio Core" + +-- Social +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4177547506"] = "Social" + +-- Political +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4245273692"] = "Political" + +-- Fiction +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T616807299"] = "Fiction" + +-- Travel +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T745861401"] = "Travel" + +-- None +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T810547195"] = "None" + +-- Party +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T850565431"] = "Party" + +-- Science +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T904504157"] = "Science" + +-- Content Creation +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T914642375"] = "Content Creation" + +-- The field IETF_TAG does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T1796010240"] = "The field IETF_TAG does not exist or is not a valid string." + +-- The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T3376221777"] = "The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code." + +-- The field IETF_TAG is empty. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T3877047896"] = "The field IETF_TAG is empty. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code." + +-- The field LANG_NAME is empty. Use a valid language name. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T4112586014"] = "The field LANG_NAME is empty. Use a valid language name." + +-- The field LANG_NAME does not exist or is not a valid string. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T4204700759"] = "The field LANG_NAME does not exist or is not a valid string." + +-- Artists +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T1142248183"] = "Artists" + +-- Children +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T188567026"] = "Children" + +-- Industrial workers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T2520336817"] = "Industrial workers" + +-- Students +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T2905889225"] = "Students" + +-- Scientists +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T332785734"] = "Scientists" + +-- Adults +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3335941460"] = "Adults" + +-- No target group +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3644477204"] = "No target group" + +-- Business professionals +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3670621687"] = "Business professionals" + +-- Teenagers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3696960735"] = "Teenagers" + +-- Unknown target group +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T384321997"] = "Unknown target group" + +-- Office workers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3873911022"] = "Office workers" + +-- Teachers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T48460338"] = "Teachers" + +-- Everyone +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T622959000"] = "Everyone" + +-- Software developers +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T831424531"] = "Software developers" + +-- Theme plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T1682350097"] = "Theme plugin" + +-- Unknown plugin type +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2313808600"] = "Unknown plugin type" + +-- Assistant plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2321563994"] = "Assistant plugin" + +-- Language plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2370593926"] = "Language plugin" + +-- Configuration plugin +UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T3353383632"] = "Configuration plugin" + +-- Standard augmentation process +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::AUGMENTATIONPROCESSES::AUGMENTATIONONE::T1072508429"] = "Standard augmentation process" + +-- This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::AUGMENTATIONPROCESSES::AUGMENTATIONONE::T3240406069"] = "This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread." + +-- Automatic AI data source selection with heuristik source reduction +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::DATASOURCESELECTIONPROCESSES::AGENTICSRCSELWITHDYNHEUR::T2339257645"] = "Automatic AI data source selection with heuristik source reduction" + +-- Automatically selects the appropriate data sources based on the last prompt. Applies a heuristic reduction at the end to reduce the number of data sources. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::DATASOURCESELECTIONPROCESSES::AGENTICSRCSELWITHDYNHEUR::T648937779"] = "Automatically selects the appropriate data sources based on the last prompt. Applies a heuristic reduction at the end to reduce the number of data sources." + +-- This RAG process filters data sources, automatically selects appropriate sources, optionally allows manual source selection, retrieves data, and automatically validates the retrieval context. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T3047786484"] = "This RAG process filters data sources, automatically selects appropriate sources, optionally allows manual source selection, retrieves data, and automatically validates the retrieval context." + +-- AI-based data source selection with AI retrieval context validation +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T3775725978"] = "AI-based data source selection with AI retrieval context validation" + +-- PDF Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T3108466742"] = "PDF Files" + +-- All Image Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T4086723714"] = "All Image Files" + +-- Text Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T639143005"] = "Text Files" + +-- All Office Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T709668067"] = "All Office Files" + +-- Failed to delete the API key due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::APIKEYS::T3658273365"] = "Failed to delete the API key due to an API issue." + +-- Failed to get the API key due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::APIKEYS::T3875720022"] = "Failed to get the API key due to an API issue." + +-- Successfully copied the text to your clipboard +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::CLIPBOARD::T3351807428"] = "Successfully copied the text to your clipboard" + +-- Failed to copy the text to your clipboard. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::CLIPBOARD::T3724548108"] = "Failed to copy the text to your clipboard." + +-- Failed to delete the secret data due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T2303057928"] = "Failed to delete the secret data due to an API issue." + +-- Failed to get the secret data due to an API issue. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T4007657575"] = "Failed to get the secret data due to an API issue." + +-- No update found. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T1015418291"] = "No update found." + +-- The hostname is not a valid HTTP(S) URL. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL." + +-- The connection test failed. Please check the connection settings. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T132896331"] = "The connection test failed. Please check the connection settings." + +-- Please select an embedding provider. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1461238528"] = "Please select an embedding provider." + +-- The file does not exist. Please select a valid file. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T148464502"] = "The file does not exist. Please select a valid file." + +-- Please select one retrieval process. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1515898234"] = "Please select one retrieval process." + +-- This data source can only be used with a self-hosted LLM provider. Please change the security policy. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1728967730"] = "This data source can only be used with a self-hosted LLM provider. Please change the security policy." + +-- The username must not be empty. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1829419906"] = "The username must not be empty." + +-- The hostname must start with either http:// or https:// +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T193387467"] = "The hostname must start with either http:// or https://" + +-- Please enter a hostname, e.g., http://localhost +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1990396672"] = "Please enter a hostname, e.g., http://localhost" + +-- Please select one valid authentication method. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2025964684"] = "Please select one valid authentication method." + +-- The name must not exceed 40 characters. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2160507967"] = "The name must not exceed 40 characters." + +-- Please select your security policy. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2250909198"] = "Please select your security policy." + +-- Please test the connection before saving. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T285470497"] = "Please test the connection before saving." + +-- Please enter your secure access token. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3086932434"] = "Please enter your secure access token." + +-- The path does not exist. Please select a valid directory. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3146272446"] = "The path does not exist. Please select a valid directory." + +-- The path must not be empty. Please select a directory. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3202118305"] = "The path must not be empty. Please select a directory." + +-- The name must not be empty. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3243861903"] = "The name must not be empty." + +-- Please enter your password. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3888492477"] = "Please enter your password." + +-- The port must be between 1 and 65535. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3965971107"] = "The port must be between 1 and 65535." + +-- The name is already used by another data source. Please choose a different name. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T4001510395"] = "The name is already used by another data source. Please choose a different name." + +-- Please acknowledge that you are aware of the cloud embedding implications. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T490875633"] = "Please acknowledge that you are aware of the cloud embedding implications." + +-- The file path must not be empty. Please select a file. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T878007824"] = "The file path must not be empty. Please select a file." + +-- Please enter the secret necessary for authentication. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T968385876"] = "Please enter the secret necessary for authentication." + +-- The hostname is not a valid HTTP(S) URL. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL." + +-- The instance name must not exceed 40 characters. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1117188308"] = "The instance name must not exceed 40 characters." + +-- Please enter a hostname, e.g., http://localhost:1234 +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T125334762"] = "Please enter a hostname, e.g., http://localhost:1234" + +-- The instance name must be unique; the chosen name is already in use. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1301966140"] = "The instance name must be unique; the chosen name is already in use." + +-- Please select a provider. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1809312323"] = "Please select a provider." + +-- The hostname must start with either http:// or https:// +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T193387467"] = "The hostname must start with either http:// or https://" + +-- Please select a host. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T2257097222"] = "Please select a host." + +-- Please enter an API key. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T3550629491"] = "Please enter an API key." + +-- Please enter an instance name. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T3999823516"] = "Please enter an instance name." + +-- Please select an Hugging Face inference provider. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T497939286"] = "Please select an Hugging Face inference provider." + +-- Please select a model. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T818893091"] = "Please select a model." + +-- Delete Chat +UI_TEXT_CONTENT["AISTUDIO::TOOLS::WORKSPACEBEHAVIOUR::T2244038752"] = "Delete Chat" diff --git a/app/MindWork AI Studio/Provider/AlibabaCloud/ProviderAlibabaCloud.cs b/app/MindWork AI Studio/Provider/AlibabaCloud/ProviderAlibabaCloud.cs index d8a633c2..dfd807df 100644 --- a/app/MindWork AI Studio/Provider/AlibabaCloud/ProviderAlibabaCloud.cs +++ b/app/MindWork AI Studio/Provider/AlibabaCloud/ProviderAlibabaCloud.cs @@ -142,7 +142,6 @@ public sealed class ProviderAlibabaCloud(ILogger logger) : BaseProvider("https:/ #endregion - private async Task> LoadModels(string[] prefixes, CancellationToken token, string? apiKeyProvisional = null) { var secretKey = apiKeyProvisional switch diff --git a/app/MindWork AI Studio/Provider/BaseProvider.cs b/app/MindWork AI Studio/Provider/BaseProvider.cs index 7b24c8bf..d24ca38d 100644 --- a/app/MindWork AI Studio/Provider/BaseProvider.cs +++ b/app/MindWork AI Studio/Provider/BaseProvider.cs @@ -4,6 +4,7 @@ using System.Text.Json; using AIStudio.Chat; using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; using AIStudio.Tools.Services; namespace AIStudio.Provider; @@ -13,6 +14,8 @@ namespace AIStudio.Provider; /// public abstract class BaseProvider : IProvider, ISecretId { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(BaseProvider).Namespace, nameof(BaseProvider)); + /// /// The HTTP client to use it for all requests. /// @@ -119,7 +122,7 @@ public abstract class BaseProvider : IProvider, ISecretId if (nextResponse.StatusCode is HttpStatusCode.Forbidden) { - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Block, $"Tried to communicate with the LLM provider '{this.InstanceName}'. You might not be able to use this provider from your location. The provider message is: '{nextResponse.ReasonPhrase}'")); + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Block, string.Format(TB("Tried to communicate with the LLM provider '{0}'. You might not be able to use this provider from your location. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}')."); errorMessage = nextResponse.ReasonPhrase; break; @@ -127,7 +130,7 @@ public abstract class BaseProvider : IProvider, ISecretId if(nextResponse.StatusCode is HttpStatusCode.BadRequest) { - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, $"Tried to communicate with the LLM provider '{this.InstanceName}'. The required message format might be changed. The provider message is: '{nextResponse.ReasonPhrase}'")); + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The required message format might be changed. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}')."); errorMessage = nextResponse.ReasonPhrase; break; @@ -135,7 +138,7 @@ public abstract class BaseProvider : IProvider, ISecretId if(nextResponse.StatusCode is HttpStatusCode.NotFound) { - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, $"Tried to communicate with the LLM provider '{this.InstanceName}'. Something was not found. The provider message is: '{nextResponse.ReasonPhrase}'")); + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. Something was not found. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}')."); errorMessage = nextResponse.ReasonPhrase; break; @@ -143,7 +146,7 @@ public abstract class BaseProvider : IProvider, ISecretId if(nextResponse.StatusCode is HttpStatusCode.Unauthorized) { - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Key, $"Tried to communicate with the LLM provider '{this.InstanceName}'. The API key might be invalid. The provider message is: '{nextResponse.ReasonPhrase}'")); + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Key, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The API key might be invalid. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}')."); errorMessage = nextResponse.ReasonPhrase; break; @@ -151,7 +154,7 @@ public abstract class BaseProvider : IProvider, ISecretId if(nextResponse.StatusCode is HttpStatusCode.InternalServerError) { - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, $"Tried to communicate with the LLM provider '{this.InstanceName}'. The server might be down or having issues. The provider message is: '{nextResponse.ReasonPhrase}'")); + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The server might be down or having issues. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}')."); errorMessage = nextResponse.ReasonPhrase; break; @@ -159,7 +162,7 @@ public abstract class BaseProvider : IProvider, ISecretId if(nextResponse.StatusCode is HttpStatusCode.ServiceUnavailable) { - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, $"Tried to communicate with the LLM provider '{this.InstanceName}'. The provider is overloaded. The message is: '{nextResponse.ReasonPhrase}'")); + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The provider is overloaded. The message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}')."); errorMessage = nextResponse.ReasonPhrase; break; @@ -176,7 +179,7 @@ public abstract class BaseProvider : IProvider, ISecretId if(retry >= MAX_RETRIES || !string.IsNullOrWhiteSpace(errorMessage)) { - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, $"Tried to communicate with the LLM provider '{this.InstanceName}'. Even after {MAX_RETRIES} retries, there were some problems with the request. The provider message is: '{errorMessage}'")); + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. Even after {1} retries, there were some problems with the request. The provider message is: '{2}'"), this.InstanceName, MAX_RETRIES, errorMessage))); return new HttpRateLimitedStreamResult(false, true, errorMessage ?? $"Failed after {MAX_RETRIES} retries; no provider message available", response); } @@ -204,7 +207,7 @@ public abstract class BaseProvider : IProvider, ISecretId } catch(Exception e) { - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, $"Tried to communicate with the LLM provider '{this.InstanceName}'. There were some problems with the request. The provider message is: '{e.Message}'")); + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, string.Format(TB("Tried to communicate with the LLM provider '{0}'. There were some problems with the request. The provider message is: '{1}'"), this.InstanceName, e.Message))); this.logger.LogError($"Failed to stream chat completion from {providerName} '{this.InstanceName}': {e.Message}"); } @@ -221,7 +224,7 @@ public abstract class BaseProvider : IProvider, ISecretId } catch (Exception e) { - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, $"Tried to stream the LLM provider '{this.InstanceName}' answer. There were some problems with the stream. The message is: '{e.Message}'")); + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, string.Format(TB("Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'"), this.InstanceName, e.Message))); this.logger.LogWarning($"Failed to read the end-of-stream state from {providerName} '{this.InstanceName}': {e.Message}"); break; } @@ -242,7 +245,7 @@ public abstract class BaseProvider : IProvider, ISecretId } catch (Exception e) { - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, $"Tried to stream the LLM provider '{this.InstanceName}' answer. Was not able to read the stream. The message is: '{e.Message}'")); + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, string.Format(TB("Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}'"), this.InstanceName, e.Message))); this.logger.LogError($"Failed to read the stream from {providerName} '{this.InstanceName}': {e.Message}"); break; } diff --git a/app/MindWork AI Studio/Provider/Confidence.cs b/app/MindWork AI Studio/Provider/Confidence.cs index a63299e1..a15fd9ed 100644 --- a/app/MindWork AI Studio/Provider/Confidence.cs +++ b/app/MindWork AI Studio/Provider/Confidence.cs @@ -1,9 +1,12 @@ using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; namespace AIStudio.Provider; public sealed record Confidence { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(Confidence).Namespace, nameof(Confidence)); + public ConfidenceLevel Level { get; private init; } = ConfidenceLevel.UNKNOWN; public string Region { get; private init; } = string.Empty; @@ -29,42 +32,42 @@ public sealed record Confidence public static readonly Confidence NONE = new() { Level = ConfidenceLevel.NONE, - Description = "No provider selected. Please select a provider to get see its confidence level.", + Description = TB("No provider selected. Please select a provider to get see its confidence level."), }; public static readonly Confidence USA_HUB = new() { Level = ConfidenceLevel.UNKNOWN, - Description = "The provider operates its service from the USA and is subject to **U.S. jurisdiction**. In case of suspicion, authorities in the USA can access your data. Please inform yourself about the use of your data. We do not know if your data is safe.", + Description = TB("The provider operates its service from the USA and is subject to **U.S. jurisdiction**. In case of suspicion, authorities in the USA can access your data. Please inform yourself about the use of your data. We do not know if your data is safe."), }; public static readonly Confidence UNKNOWN = new() { Level = ConfidenceLevel.UNKNOWN, - Description = "The trust level of this provider **has not yet** been thoroughly **investigated and evaluated**. We do not know if your data is safe.", + Description = TB("The trust level of this provider **has not yet** been thoroughly **investigated and evaluated**. We do not know if your data is safe."), }; public static readonly Confidence USA_NO_TRAINING = new() { Level = ConfidenceLevel.MODERATE, - Description = "The provider operates its service from the USA and is subject to **US jurisdiction**. In case of suspicion, authorities in the USA can access your data. However, **your data is not used for training** purposes.", + Description = TB("The provider operates its service from the USA and is subject to **US jurisdiction**. In case of suspicion, authorities in the USA can access your data. However, **your data is not used for training** purposes."), }; public static readonly Confidence CHINA_NO_TRAINING = new() { Level = ConfidenceLevel.MODERATE, - Description = "The provider operates its service from China. In case of suspicion, authorities in the respective countries of operation may access your data. However, **your data is not used for training** purposes.", + Description = TB("The provider operates its service from China. In case of suspicion, authorities in the respective countries of operation may access your data. However, **your data is not used for training** purposes."), }; public static readonly Confidence GDPR_NO_TRAINING = new() { Level = ConfidenceLevel.MEDIUM, - Description = "The provider is located in the EU and is subject to the **GDPR** (General Data Protection Regulation). Additionally, the provider states that **your data is not used for training**.", + Description = TB("The provider is located in the EU and is subject to the **GDPR** (General Data Protection Regulation). Additionally, the provider states that **your data is not used for training**."), }; public static readonly Confidence SELF_HOSTED = new() { Level = ConfidenceLevel.HIGH, - Description = "You or your organization operate the LLM locally or within your trusted network. In terms of data processing and security, this is the best possible way.", + Description = TB("You or your organization operate the LLM locally or within your trusted network. In terms of data processing and security, this is the best possible way."), }; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/ConfidenceLevelExtensions.cs b/app/MindWork AI Studio/Provider/ConfidenceLevelExtensions.cs index 116238fe..915b37cf 100644 --- a/app/MindWork AI Studio/Provider/ConfidenceLevelExtensions.cs +++ b/app/MindWork AI Studio/Provider/ConfidenceLevelExtensions.cs @@ -1,21 +1,24 @@ using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; namespace AIStudio.Provider; public static class ConfidenceLevelExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ConfidenceLevelExtensions).Namespace, nameof(ConfidenceLevelExtensions)); + public static string GetName(this ConfidenceLevel level) => level switch { - ConfidenceLevel.NONE => "No provider selected", + ConfidenceLevel.NONE => TB("No provider selected"), - ConfidenceLevel.UNTRUSTED => "Untrusted", - ConfidenceLevel.VERY_LOW => "Very Low", - ConfidenceLevel.LOW => "Low", - ConfidenceLevel.MODERATE => "Moderate", - ConfidenceLevel.MEDIUM => "Medium", - ConfidenceLevel.HIGH => "High", + ConfidenceLevel.UNTRUSTED => TB("Untrusted"), + ConfidenceLevel.VERY_LOW => TB("Very Low"), + ConfidenceLevel.LOW => TB("Low"), + ConfidenceLevel.MODERATE => TB("Moderate"), + ConfidenceLevel.MEDIUM => TB("Medium"), + ConfidenceLevel.HIGH => TB("High"), - _ => "Unknown confidence level", + _ => TB("Unknown confidence level"), }; public static string GetColor(this ConfidenceLevel level, SettingsManager settingsManager) => (level, settingsManager.IsDarkMode) switch diff --git a/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs b/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs index 68a62297..1c820baa 100644 --- a/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs +++ b/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs @@ -12,6 +12,7 @@ using AIStudio.Provider.OpenAI; using AIStudio.Provider.SelfHosted; using AIStudio.Provider.X; using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; using Host = AIStudio.Provider.SelfHosted.Host; @@ -19,6 +20,8 @@ namespace AIStudio.Provider; public static class LLMProvidersExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(LLMProvidersExtensions).Namespace, nameof(LLMProvidersExtensions)); + /// /// Returns the human-readable name of the provider. /// @@ -26,7 +29,7 @@ public static class LLMProvidersExtensions /// The human-readable name of the provider. public static string ToName(this LLMProviders llmProvider) => llmProvider switch { - LLMProviders.NONE => "No provider selected", + LLMProviders.NONE => TB("No provider selected"), LLMProviders.OPEN_AI => "OpenAI", LLMProviders.ANTHROPIC => "Anthropic", @@ -40,12 +43,12 @@ public static class LLMProvidersExtensions LLMProviders.FIREWORKS => "Fireworks.ai", LLMProviders.HUGGINGFACE => "Hugging Face", - LLMProviders.SELF_HOSTED => "Self-hosted", + LLMProviders.SELF_HOSTED => TB("Self-hosted"), LLMProviders.HELMHOLTZ => "Helmholtz Blablador", LLMProviders.GWDG => "GWDG SAIA", - _ => "Unknown", + _ => TB("Unknown"), }; /// diff --git a/app/MindWork AI Studio/Settings/ConfigurationSelectData.cs b/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs similarity index 61% rename from app/MindWork AI Studio/Settings/ConfigurationSelectData.cs rename to app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs index a47bde9d..9d066a7a 100644 --- a/app/MindWork AI Studio/Settings/ConfigurationSelectData.cs +++ b/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs @@ -26,6 +26,8 @@ public readonly record struct ConfigurationSelectData(string Name, T Value); /// public static class ConfigurationSelectDataFactory { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ConfigurationSelectDataFactory).Namespace, nameof(ConfigurationSelectDataFactory)); + public static IEnumerable> GetLangBehaviorData() { foreach (var behavior in Enum.GetValues()) @@ -43,65 +45,65 @@ public static class ConfigurationSelectDataFactory public static IEnumerable> GetLoadingChatProviderBehavior() { - yield return new("When possible, use the LLM provider which was used for each chat in the first place", LoadingChatProviderBehavior.USE_CHAT_PROVIDER_IF_AVAILABLE); - yield return new("Use the latest LLM provider, which was used before; use the default chat provider initially", LoadingChatProviderBehavior.ALWAYS_USE_LATEST_CHAT_PROVIDER); - yield return new("Always use the default chat provider when loading chats", LoadingChatProviderBehavior.ALWAYS_USE_DEFAULT_CHAT_PROVIDER); + yield return new(TB("When possible, use the LLM provider which was used for each chat in the first place"), LoadingChatProviderBehavior.USE_CHAT_PROVIDER_IF_AVAILABLE); + yield return new(TB("Use the latest LLM provider, which was used before; use the default chat provider initially"), LoadingChatProviderBehavior.ALWAYS_USE_LATEST_CHAT_PROVIDER); + yield return new(TB("Always use the default chat provider when loading chats"), LoadingChatProviderBehavior.ALWAYS_USE_DEFAULT_CHAT_PROVIDER); } public static IEnumerable> GetAddChatProviderBehavior() { - yield return new("Use the latest LLM provider, which was used before; use the default chat provider initially", AddChatProviderBehavior.ADDED_CHATS_USE_LATEST_PROVIDER); - yield return new("Always use the default chat provider for new chats", AddChatProviderBehavior.ADDED_CHATS_USE_DEFAULT_PROVIDER); + yield return new(TB("Use the latest LLM provider, which was used before; use the default chat provider initially"), AddChatProviderBehavior.ADDED_CHATS_USE_LATEST_PROVIDER); + yield return new(TB("Always use the default chat provider for new chats"), AddChatProviderBehavior.ADDED_CHATS_USE_DEFAULT_PROVIDER); } public static IEnumerable> GetSendBehaviorData() { - yield return new("No key is sending the input", SendBehavior.NO_KEY_IS_SENDING); - yield return new("Modifier key + enter is sending the input", SendBehavior.MODIFER_ENTER_IS_SENDING); - yield return new("Enter is sending the input", SendBehavior.ENTER_IS_SENDING); + yield return new(TB("No key is sending the input"), SendBehavior.NO_KEY_IS_SENDING); + yield return new(TB("Modifier key + enter is sending the input"), SendBehavior.MODIFER_ENTER_IS_SENDING); + yield return new(TB("Enter is sending the input"), SendBehavior.ENTER_IS_SENDING); } public static IEnumerable> GetUpdateBehaviorData() { - yield return new("No automatic update checks", UpdateBehavior.NO_CHECK); - yield return new("Once at startup", UpdateBehavior.ONCE_STARTUP); - yield return new("Check every hour", UpdateBehavior.HOURLY); - yield return new("Check every day", UpdateBehavior.DAILY); - yield return new ("Check every week", UpdateBehavior.WEEKLY); + yield return new(TB("No automatic update checks"), UpdateBehavior.NO_CHECK); + yield return new(TB("Once at startup"), UpdateBehavior.ONCE_STARTUP); + yield return new(TB("Check every hour"), UpdateBehavior.HOURLY); + yield return new(TB("Check every day"), UpdateBehavior.DAILY); + yield return new (TB("Check every week"), UpdateBehavior.WEEKLY); } public static IEnumerable> GetWorkspaceStorageBehaviorData() { - yield return new("Disable workspaces", WorkspaceStorageBehavior.DISABLE_WORKSPACES); - yield return new("Store chats automatically", WorkspaceStorageBehavior.STORE_CHATS_AUTOMATICALLY); - yield return new("Store chats manually", WorkspaceStorageBehavior.STORE_CHATS_MANUALLY); + yield return new(TB("Disable workspaces"), WorkspaceStorageBehavior.DISABLE_WORKSPACES); + yield return new(TB("Store chats automatically"), WorkspaceStorageBehavior.STORE_CHATS_AUTOMATICALLY); + yield return new(TB("Store chats manually"), WorkspaceStorageBehavior.STORE_CHATS_MANUALLY); } public static IEnumerable> GetWorkspaceStorageTemporaryMaintenancePolicyData() { - yield return new("No automatic maintenance for temporary chats", WorkspaceStorageTemporaryMaintenancePolicy.NO_AUTOMATIC_MAINTENANCE); - yield return new("Delete temporary chats older than 7 days", WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_7_DAYS); - yield return new("Delete temporary chats older than 30 days", WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_30_DAYS); - yield return new("Delete temporary chats older than 90 days", WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_90_DAYS); - yield return new("Delete temporary chats older than 180 days", WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_180_DAYS); - yield return new("Delete temporary chats older than 1 year", WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_365_DAYS); + yield return new(TB("No automatic maintenance for disappearing chats; old chats will never be deleted"), WorkspaceStorageTemporaryMaintenancePolicy.NO_AUTOMATIC_MAINTENANCE); + yield return new(TB("Delete disappearing chats older than 7 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_7_DAYS); + yield return new(TB("Delete disappearing chats older than 30 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_30_DAYS); + yield return new(TB("Delete disappearing chats older than 90 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_90_DAYS); + yield return new(TB("Delete disappearing chats older than 180 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_180_DAYS); + yield return new(TB("Delete disappearing chats older than 1 year"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_365_DAYS); } public static IEnumerable> GetWorkspaceDisplayBehaviorData() { - yield return new("Toggle the overlay: the chat uses all the space, workspaces are temporarily shown", WorkspaceDisplayBehavior.TOGGLE_OVERLAY); - yield return new("Toggle the sidebar: show the workspaces next to the chat when desired", WorkspaceDisplayBehavior.TOGGLE_SIDEBAR); - yield return new("Sidebar is always visible: show the workspaces next to the chat all the time", WorkspaceDisplayBehavior.SIDEBAR_ALWAYS_VISIBLE); + yield return new(TB("Toggle the overlay: the chat uses all the space, workspaces are temporarily shown"), WorkspaceDisplayBehavior.TOGGLE_OVERLAY); + yield return new(TB("Toggle the sidebar: show the workspaces next to the chat when desired"), WorkspaceDisplayBehavior.TOGGLE_SIDEBAR); + yield return new(TB("Sidebar is always visible: show the workspaces next to the chat all the time"), WorkspaceDisplayBehavior.SIDEBAR_ALWAYS_VISIBLE); } public static IEnumerable> GetPreviewVisibility() { - yield return new("All preview features are hidden", PreviewVisibility.NONE); - yield return new("Also show features ready for release; these should be stable", PreviewVisibility.RELEASE_CANDIDATE); - yield return new("Also show features in beta: these are almost ready for release; expect some bugs", PreviewVisibility.BETA); - yield return new("Also show features in alpha: these are in development; expect bugs and missing features", PreviewVisibility.ALPHA); - yield return new("Show also prototype features: these are works in progress; expect bugs and missing features", PreviewVisibility.PROTOTYPE); - yield return new("Show also experimental features: these are experimental; expect bugs, missing features, many changes", PreviewVisibility.EXPERIMENTAL); + yield return new(TB("All preview features are hidden"), PreviewVisibility.NONE); + yield return new(TB("Also show features ready for release; these should be stable"), PreviewVisibility.RELEASE_CANDIDATE); + yield return new(TB("Also show features in beta: these are almost ready for release; expect some bugs"), PreviewVisibility.BETA); + yield return new(TB("Also show features in alpha: these are in development; expect bugs and missing features"), PreviewVisibility.ALPHA); + yield return new(TB("Show also prototype features: these are works in progress; expect bugs and missing features"), PreviewVisibility.PROTOTYPE); + yield return new(TB("Show also experimental features: these are experimental; expect bugs, missing features, many changes"), PreviewVisibility.EXPERIMENTAL); } public static IEnumerable> GetPreviewFeaturesData(SettingsManager settingsManager) @@ -118,10 +120,10 @@ public static class ConfigurationSelectDataFactory public static IEnumerable> GetNavBehaviorData() { - yield return new("Navigation expands on mouse hover", NavBehavior.EXPAND_ON_HOVER); - yield return new("Navigation never expands, but there are tooltips", NavBehavior.NEVER_EXPAND_USE_TOOLTIPS); - yield return new("Navigation never expands, no tooltips", NavBehavior.NEVER_EXPAND_NO_TOOLTIPS); - yield return new("Always expand navigation", NavBehavior.ALWAYS_EXPAND); + yield return new(TB("Navigation expands on mouse hover"), NavBehavior.EXPAND_ON_HOVER); + yield return new(TB("Navigation never expands, but there are tooltips"), NavBehavior.NEVER_EXPAND_USE_TOOLTIPS); + yield return new(TB("Navigation never expands, no tooltips"), NavBehavior.NEVER_EXPAND_NO_TOOLTIPS); + yield return new(TB("Always expand navigation"), NavBehavior.ALWAYS_EXPAND); } public static IEnumerable> GetIconSourcesData() @@ -140,7 +142,7 @@ public static class ConfigurationSelectDataFactory { foreach (var language in Enum.GetValues()) if(language is CommonLanguages.AS_IS) - yield return new("Not yet specified", language); + yield return new(TB("Not yet specified"), language); else yield return new(language.Name(), language); } @@ -149,7 +151,7 @@ public static class ConfigurationSelectDataFactory { foreach (var language in Enum.GetValues()) if(language is CommonLanguages.AS_IS) - yield return new("Do not specify the language", language); + yield return new(TB("Do not specify the language"), language); else yield return new(language.Name(), language); } @@ -211,7 +213,7 @@ public static class ConfigurationSelectDataFactory foreach (var level in Enum.GetValues()) { if(level is ConfidenceLevel.NONE) - yield return new("No minimum confidence level chosen", level); + yield return new(TB("No minimum confidence level chosen"), level); if(level < minimumLevel) continue; diff --git a/app/MindWork AI Studio/Settings/DataModel/DataSourceSecurityExtensions.cs b/app/MindWork AI Studio/Settings/DataModel/DataSourceSecurityExtensions.cs index 6e52d0fd..b87a0e56 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataSourceSecurityExtensions.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataSourceSecurityExtensions.cs @@ -1,25 +1,29 @@ +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Settings.DataModel; public static class DataSourceSecurityExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(DataSourceSecurityExtensions).Namespace, nameof(DataSourceSecurityExtensions)); + public static string ToSelectionText(this DataSourceSecurity security) => security switch { - DataSourceSecurity.NOT_SPECIFIED => "Please select a security policy", + DataSourceSecurity.NOT_SPECIFIED => TB("Please select a security policy"), - DataSourceSecurity.ALLOW_ANY => "This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider.", - DataSourceSecurity.SELF_HOSTED => "This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider.", + DataSourceSecurity.ALLOW_ANY => TB("This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider."), + DataSourceSecurity.SELF_HOSTED => TB("This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider."), - _ => "Unknown security policy" + _ => TB("Unknown security policy") }; public static string ToInfoText(this DataSourceSecurity security) => security switch { - DataSourceSecurity.NOT_SPECIFIED => "The security of the data source is not specified yet. You cannot use this data source until you specify a security policy.", + DataSourceSecurity.NOT_SPECIFIED => TB("The security of the data source is not specified yet. You cannot use this data source until you specify a security policy."), - DataSourceSecurity.ALLOW_ANY => "This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider.", - DataSourceSecurity.SELF_HOSTED => "This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider.", + DataSourceSecurity.ALLOW_ANY => TB("This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider."), + DataSourceSecurity.SELF_HOSTED => TB("This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider."), - _ => "Unknown security policy" + _ => TB("Unknown security policy") }; public static TextColor GetColor(this DataSourceSecurity security) => security switch diff --git a/app/MindWork AI Studio/Settings/DataModel/DataSourceTypeExtension.cs b/app/MindWork AI Studio/Settings/DataModel/DataSourceTypeExtension.cs index 196eac78..3678f439 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataSourceTypeExtension.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataSourceTypeExtension.cs @@ -1,3 +1,5 @@ +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Settings.DataModel; /// @@ -5,6 +7,8 @@ namespace AIStudio.Settings.DataModel; /// public static class DataSourceTypeExtension { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(DataSourceTypeExtension).Namespace, nameof(DataSourceTypeExtension)); + /// /// Get the display name of the data source type. /// @@ -12,10 +16,10 @@ public static class DataSourceTypeExtension /// The display name of the data source type. public static string GetDisplayName(this DataSourceType type) => type switch { - DataSourceType.LOCAL_FILE => "Local File", - DataSourceType.LOCAL_DIRECTORY => "Local Directory", - DataSourceType.ERI_V1 => "External ERI Server (v1)", + DataSourceType.LOCAL_FILE => TB("Local File"), + DataSourceType.LOCAL_DIRECTORY => TB("Local Directory"), + DataSourceType.ERI_V1 => TB("External ERI Server (v1)"), - _ => "None", + _ => TB("None"), }; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/DataModel/PreviewFeaturesExtensions.cs b/app/MindWork AI Studio/Settings/DataModel/PreviewFeaturesExtensions.cs index dee08282..79972185 100644 --- a/app/MindWork AI Studio/Settings/DataModel/PreviewFeaturesExtensions.cs +++ b/app/MindWork AI Studio/Settings/DataModel/PreviewFeaturesExtensions.cs @@ -1,16 +1,20 @@ +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Settings.DataModel; public static class PreviewFeaturesExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PreviewFeaturesExtensions).Namespace, nameof(PreviewFeaturesExtensions)); + public static string GetPreviewDescription(this PreviewFeatures feature) => feature switch { - PreviewFeatures.PRE_WRITER_MODE_2024 => "Writer Mode: Experiments about how to write long texts using AI", - PreviewFeatures.PRE_RAG_2024 => "RAG: Preview of our RAG implementation where you can refer your files or integrate enterprise data within your company", + PreviewFeatures.PRE_WRITER_MODE_2024 => TB("Writer Mode: Experiments about how to write long texts using AI"), + PreviewFeatures.PRE_RAG_2024 => TB("RAG: Preview of our RAG implementation where you can refer your files or integrate enterprise data within your company"), - PreviewFeatures.PRE_PLUGINS_2025 => "Plugins: Preview of our plugin system where you can extend the functionality of the app", - PreviewFeatures.PRE_READ_PDF_2025 => "Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files", + PreviewFeatures.PRE_PLUGINS_2025 => TB("Plugins: Preview of our plugin system where you can extend the functionality of the app"), + PreviewFeatures.PRE_READ_PDF_2025 => TB("Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files"), - _ => "Unknown preview feature" + _ => TB("Unknown preview feature") }; public static bool IsEnabled(this PreviewFeatures feature, SettingsManager settingsManager) => settingsManager.ConfigurationData.App.EnabledPreviewFeatures.Contains(feature); diff --git a/app/MindWork AI Studio/Settings/DataModel/SendToChatDataSourceBehaviorExtensions.cs b/app/MindWork AI Studio/Settings/DataModel/SendToChatDataSourceBehaviorExtensions.cs index 3894ba2b..9c8e4ebc 100644 --- a/app/MindWork AI Studio/Settings/DataModel/SendToChatDataSourceBehaviorExtensions.cs +++ b/app/MindWork AI Studio/Settings/DataModel/SendToChatDataSourceBehaviorExtensions.cs @@ -1,12 +1,16 @@ +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Settings.DataModel; public static class SendToChatDataSourceBehaviorExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(SendToChatDataSourceBehaviorExtensions).Namespace, nameof(SendToChatDataSourceBehaviorExtensions)); + public static string Description(this SendToChatDataSourceBehavior behavior) => behavior switch { - SendToChatDataSourceBehavior.NO_DATA_SOURCES => "Use no data sources, when sending an assistant result to a chat", - SendToChatDataSourceBehavior.APPLY_STANDARD_CHAT_DATA_SOURCE_OPTIONS => "Apply standard chat data source options, when sending an assistant result to a chat", + SendToChatDataSourceBehavior.NO_DATA_SOURCES => TB("Use no data sources, when sending an assistant result to a chat"), + SendToChatDataSourceBehavior.APPLY_STANDARD_CHAT_DATA_SOURCE_OPTIONS => TB("Apply standard chat data source options, when sending an assistant result to a chat"), - _ => "Unknown behavior", + _ => TB("Unknown behavior"), }; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/DataModel/ThemesExtensions.cs b/app/MindWork AI Studio/Settings/DataModel/ThemesExtensions.cs index 5d36a1bc..128e8d4d 100644 --- a/app/MindWork AI Studio/Settings/DataModel/ThemesExtensions.cs +++ b/app/MindWork AI Studio/Settings/DataModel/ThemesExtensions.cs @@ -1,13 +1,17 @@ +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Settings.DataModel; public static class ThemesExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ThemesExtensions).Namespace, nameof(ThemesExtensions)); + public static string GetName(this Themes theme) => theme switch { - Themes.SYSTEM => "Synchronized with the operating system settings", - Themes.LIGHT => "Always use light theme", - Themes.DARK => "Always use dark theme", + Themes.SYSTEM => TB("Synchronized with the operating system settings"), + Themes.LIGHT => TB("Always use light theme"), + Themes.DARK => TB("Always use dark theme"), - _ => "Unknown setting", + _ => TB("Unknown setting"), }; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/Profile.cs b/app/MindWork AI Studio/Settings/Profile.cs index b7a7da6e..5e0977f4 100644 --- a/app/MindWork AI Studio/Settings/Profile.cs +++ b/app/MindWork AI Studio/Settings/Profile.cs @@ -1,10 +1,14 @@ +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Settings; public readonly record struct Profile(uint Num, string Id, string Name, string NeedToKnow, string Actions) { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(Profile).Namespace, nameof(Profile)); + public static readonly Profile NO_PROFILE = new() { - Name = "Use no profile", + Name = TB("Use no profile"), NeedToKnow = string.Empty, Actions = string.Empty, Id = Guid.Empty.ToString(), diff --git a/app/MindWork AI Studio/Tools/AuthMethodsV1Extensions.cs b/app/MindWork AI Studio/Tools/AuthMethodsV1Extensions.cs index 4d11017a..af93103f 100644 --- a/app/MindWork AI Studio/Tools/AuthMethodsV1Extensions.cs +++ b/app/MindWork AI Studio/Tools/AuthMethodsV1Extensions.cs @@ -1,16 +1,19 @@ using AIStudio.Tools.ERIClient.DataModel; +using AIStudio.Tools.PluginSystem; namespace AIStudio.Tools; public static class AuthMethodsV1Extensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(AuthMethodsV1Extensions).Namespace, nameof(AuthMethodsV1Extensions)); + public static string DisplayName(this AuthMethod authMethod) => authMethod switch { - AuthMethod.NONE => "None", - AuthMethod.USERNAME_PASSWORD => "Username & Password", - AuthMethod.KERBEROS => "SSO (Kerberos)", - AuthMethod.TOKEN => "Access Token", + AuthMethod.NONE => TB("None"), + AuthMethod.USERNAME_PASSWORD => TB("Username & Password"), + AuthMethod.KERBEROS => TB("SSO (Kerberos)"), + AuthMethod.TOKEN => TB("Access Token"), - _ => "Unknown authentication method", + _ => TB("Unknown authentication method"), }; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/CommonLanguageExtensions.cs b/app/MindWork AI Studio/Tools/CommonLanguageExtensions.cs index 39de88e8..f97436d0 100644 --- a/app/MindWork AI Studio/Tools/CommonLanguageExtensions.cs +++ b/app/MindWork AI Studio/Tools/CommonLanguageExtensions.cs @@ -1,23 +1,27 @@ +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Tools; public static class CommonLanguageExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(CommonLanguageExtensions).Namespace, nameof(CommonLanguageExtensions)); + public static string Name(this CommonLanguages language) => language switch { - CommonLanguages.AS_IS => "Do not change the language", + CommonLanguages.AS_IS => TB("Do not change the language"), - CommonLanguages.EN_US => "English (US)", - CommonLanguages.EN_GB => "English (UK)", - CommonLanguages.ZH_CN => "Chinese (Simplified)", - CommonLanguages.HI_IN => "Hindi (India)", - CommonLanguages.ES_ES => "Spanish (Spain)", - CommonLanguages.FR_FR => "French (France)", - CommonLanguages.DE_DE => "German (Germany)", - CommonLanguages.DE_AT => "German (Austria)", - CommonLanguages.DE_CH => "German (Switzerland)", - CommonLanguages.JA_JP => "Japanese (Japan)", + CommonLanguages.EN_US => TB("English (US)"), + CommonLanguages.EN_GB => TB("English (UK)"), + CommonLanguages.ZH_CN => TB("Chinese (Simplified)"), + CommonLanguages.HI_IN => TB("Hindi (India)"), + CommonLanguages.ES_ES => TB("Spanish (Spain)"), + CommonLanguages.FR_FR => TB("French (France)"), + CommonLanguages.DE_DE => TB("German (Germany)"), + CommonLanguages.DE_AT => TB("German (Austria)"), + CommonLanguages.DE_CH => TB("German (Switzerland)"), + CommonLanguages.JA_JP => TB("Japanese (Japan)"), - _ => "Other", + _ => TB("Other"), }; public static string ToIETFTag(this CommonLanguages language) => language switch @@ -56,7 +60,7 @@ public static class CommonLanguageExtensions public static string NameSelecting(this CommonLanguages language) { if(language is CommonLanguages.AS_IS) - return "Please select the target language"; + return TB("Please select the target language"); return language.Name(); } @@ -64,7 +68,7 @@ public static class CommonLanguageExtensions public static string NameSelectingOptional(this CommonLanguages language) { if(language is CommonLanguages.AS_IS) - return "Do not specify the language"; + return TB("Do not specify the language"); return language.Name(); } diff --git a/app/MindWork AI Studio/Tools/ComponentsExtensions.cs b/app/MindWork AI Studio/Tools/ComponentsExtensions.cs index 2247b6e6..f7e929c5 100644 --- a/app/MindWork AI Studio/Tools/ComponentsExtensions.cs +++ b/app/MindWork AI Studio/Tools/ComponentsExtensions.cs @@ -2,11 +2,14 @@ using System.Diagnostics.CodeAnalysis; using AIStudio.Provider; using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; namespace AIStudio.Tools; public static class ComponentsExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ComponentsExtensions).Namespace, nameof(ComponentsExtensions)); + public static bool AllowSendTo(this Components component) => component switch { Components.NONE => false, @@ -26,22 +29,22 @@ public static class ComponentsExtensions public static string Name(this Components component) => component switch { - Components.GRAMMAR_SPELLING_ASSISTANT => "Grammar & Spelling Assistant", - Components.TEXT_SUMMARIZER_ASSISTANT => "Text Summarizer Assistant", - Components.ICON_FINDER_ASSISTANT => "Icon Finder Assistant", - Components.TRANSLATION_ASSISTANT => "Translation Assistant", - Components.REWRITE_ASSISTANT => "Rewrite Assistant", - Components.AGENDA_ASSISTANT => "Agenda Assistant", - Components.CODING_ASSISTANT => "Coding Assistant", - Components.EMAIL_ASSISTANT => "E-Mail Assistant", - Components.LEGAL_CHECK_ASSISTANT => "Legal Check Assistant", - Components.SYNONYMS_ASSISTANT => "Synonym Assistant", - Components.MY_TASKS_ASSISTANT => "My Tasks Assistant", - Components.JOB_POSTING_ASSISTANT => "Job Posting Assistant", - Components.ERI_ASSISTANT => "ERI Server", - Components.I18N_ASSISTANT => "Localization Assistant", + Components.GRAMMAR_SPELLING_ASSISTANT => TB("Grammar & Spelling Assistant"), + Components.TEXT_SUMMARIZER_ASSISTANT => TB("Text Summarizer Assistant"), + Components.ICON_FINDER_ASSISTANT => TB("Icon Finder Assistant"), + Components.TRANSLATION_ASSISTANT => TB("Translation Assistant"), + Components.REWRITE_ASSISTANT => TB("Rewrite Assistant"), + Components.AGENDA_ASSISTANT => TB("Agenda Assistant"), + Components.CODING_ASSISTANT => TB("Coding Assistant"), + Components.EMAIL_ASSISTANT => TB("E-Mail Assistant"), + Components.LEGAL_CHECK_ASSISTANT => TB("Legal Check Assistant"), + Components.SYNONYMS_ASSISTANT => TB("Synonym Assistant"), + Components.MY_TASKS_ASSISTANT => TB("My Tasks Assistant"), + Components.JOB_POSTING_ASSISTANT => TB("Job Posting Assistant"), + Components.ERI_ASSISTANT => TB("ERI Server"), + Components.I18N_ASSISTANT => TB("Localization Assistant"), - Components.CHAT => "New Chat", + Components.CHAT => TB("New Chat"), _ => Enum.GetName(typeof(Components), component)!, }; diff --git a/app/MindWork AI Studio/Tools/ConfidenceSchemesExtensions.cs b/app/MindWork AI Studio/Tools/ConfidenceSchemesExtensions.cs index 035be948..52ea512b 100644 --- a/app/MindWork AI Studio/Tools/ConfidenceSchemesExtensions.cs +++ b/app/MindWork AI Studio/Tools/ConfidenceSchemesExtensions.cs @@ -1,18 +1,22 @@ +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Tools; public static class ConfidenceSchemesExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ConfidenceSchemesExtensions).Namespace, nameof(ConfidenceSchemesExtensions)); + public static string GetListDescription(this ConfidenceSchemes scheme) => scheme switch { - ConfidenceSchemes.TRUST_ALL => "Trust all LLM providers", - ConfidenceSchemes.TRUST_USA_EUROPE => "Trust LLM providers from the USA and Europe", - ConfidenceSchemes.TRUST_USA => "Trust LLM providers from the USA", - ConfidenceSchemes.TRUST_EUROPE => "Trust LLM providers from Europe", - ConfidenceSchemes.TRUST_ASIA => "Trust LLM providers from Asia", - ConfidenceSchemes.LOCAL_TRUST_ONLY => "Trust only local LLM providers", + ConfidenceSchemes.TRUST_ALL => TB("Trust all LLM providers"), + ConfidenceSchemes.TRUST_USA_EUROPE => TB("Trust LLM providers from the USA and Europe"), + ConfidenceSchemes.TRUST_USA => TB("Trust LLM providers from the USA"), + ConfidenceSchemes.TRUST_EUROPE => TB("Trust LLM providers from Europe"), + ConfidenceSchemes.TRUST_ASIA => TB("Trust LLM providers from Asia"), + ConfidenceSchemes.LOCAL_TRUST_ONLY => TB("Trust only local LLM providers"), - ConfidenceSchemes.CUSTOM => "Configure your own confidence scheme", + ConfidenceSchemes.CUSTOM => TB("Configure your own confidence scheme"), - _ => "Unknown confidence scheme" + _ => TB("Unknown confidence scheme"), }; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/ERIClient/DataModel/ProviderTypeExtensions.cs b/app/MindWork AI Studio/Tools/ERIClient/DataModel/ProviderTypeExtensions.cs index ecdbcc19..643d48b5 100644 --- a/app/MindWork AI Studio/Tools/ERIClient/DataModel/ProviderTypeExtensions.cs +++ b/app/MindWork AI Studio/Tools/ERIClient/DataModel/ProviderTypeExtensions.cs @@ -1,13 +1,17 @@ +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Tools.ERIClient.DataModel; public static class ProviderTypeExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ProviderTypeExtensions).Namespace, nameof(ProviderTypeExtensions)); + public static string Explain(this ProviderType providerType) => providerType switch { - ProviderType.NONE => "The related data is not allowed to be sent to any LLM provider. This means that this data source cannot be used at the moment.", - ProviderType.ANY => "The related data can be sent to any provider, regardless of where it is hosted (cloud or self-hosted).", - ProviderType.SELF_HOSTED => "The related data can be sent to a provider that is hosted by the same organization, either on-premises or locally. Cloud-based providers are not allowed.", + ProviderType.NONE => TB("The related data is not allowed to be sent to any LLM provider. This means that this data source cannot be used at the moment."), + ProviderType.ANY => TB("The related data can be sent to any provider, regardless of where it is hosted (cloud or self-hosted)."), + ProviderType.SELF_HOSTED => TB("The related data can be sent to a provider that is hosted by the same organization, either on-premises or locally. Cloud-based providers are not allowed."), - _ => "Unknown configuration. This data source cannot be used at the moment.", + _ => TB("Unknown configuration. This data source cannot be used at the moment."), }; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/ERIClient/ERIClientV1.cs b/app/MindWork AI Studio/Tools/ERIClient/ERIClientV1.cs index 178849dd..3769fcbf 100644 --- a/app/MindWork AI Studio/Tools/ERIClient/ERIClientV1.cs +++ b/app/MindWork AI Studio/Tools/ERIClient/ERIClientV1.cs @@ -3,12 +3,15 @@ using System.Text.Json; using AIStudio.Settings; using AIStudio.Tools.ERIClient.DataModel; +using AIStudio.Tools.PluginSystem; using AIStudio.Tools.Services; namespace AIStudio.Tools.ERIClient; public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), IERIClient { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ERIClientV1).Namespace, nameof(ERIClientV1)); + #region Implementation of IERIClient public async Task>> GetAuthMethodsAsync(CancellationToken cancellationToken = default) @@ -21,7 +24,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to retrieve the authentication methods: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}" + Message = string.Format(TB("Failed to retrieve the authentication methods: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase) }; } @@ -31,7 +34,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the authentication methods: the ERI server did not return a valid response." + Message = TB("Failed to retrieve the authentication methods: the ERI server did not return a valid response.") }; } @@ -46,7 +49,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the authentication methods: the request was canceled either by the user or due to a timeout." + Message = TB("Failed to retrieve the authentication methods: the request was canceled either by the user or due to a timeout.") }; } catch (Exception e) @@ -54,7 +57,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to retrieve the authentication methods due to an exception: {e.Message}" + Message = string.Format(TB("Failed to retrieve the authentication methods due to an exception: {0}"), e.Message) }; } } @@ -76,7 +79,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to authenticate with the ERI server. Code: {noneAuthResponse.StatusCode}, Reason: {noneAuthResponse.ReasonPhrase}" + Message = string.Format(TB("Failed to authenticate with the ERI server. Code: {0}, Reason: {1}"), noneAuthResponse.StatusCode, noneAuthResponse.ReasonPhrase) }; } @@ -86,7 +89,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to authenticate with the ERI server: the response was invalid." + Message = TB("Failed to authenticate with the ERI server: the response was invalid.") }; } @@ -108,7 +111,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the password." + Message = TB("Failed to retrieve the password.") }; } @@ -130,7 +133,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to authenticate with the ERI server. Code: {usernamePasswordAuthResponse.StatusCode}, Reason: {usernamePasswordAuthResponse.ReasonPhrase}" + Message = string.Format(TB("Failed to authenticate with the ERI server. Code: {0}, Reason: {1}"), usernamePasswordAuthResponse.StatusCode, usernamePasswordAuthResponse.ReasonPhrase) }; } @@ -140,7 +143,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to authenticate with the server: the response was invalid." + Message = TB("Failed to authenticate with the server: the response was invalid.") }; } @@ -162,7 +165,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the access token." + Message = TB("Failed to retrieve the access token.") }; } @@ -181,7 +184,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to authenticate with the ERI server. Code: {tokenAuthResponse.StatusCode}, Reason: {tokenAuthResponse.ReasonPhrase}" + Message = string.Format(TB("Failed to authenticate with the ERI server. Code: {0}, Reason: {1}"), tokenAuthResponse.StatusCode, tokenAuthResponse.ReasonPhrase) }; } @@ -191,7 +194,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to authenticate with the ERI server: the response was invalid." + Message = TB("Failed to authenticate with the ERI server: the response was invalid.") }; } @@ -208,7 +211,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "The authentication method is not supported yet." + Message = TB("The authentication method is not supported yet.") }; } } @@ -217,7 +220,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to authenticate with the ERI server: the request was canceled either by the user or due to a timeout." + Message = TB("Failed to authenticate with the ERI server: the request was canceled either by the user or due to a timeout.") }; } catch (Exception e) @@ -225,7 +228,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to authenticate with the ERI server due to an exception: {e.Message}" + Message = string.Format(TB("Failed to authenticate with the ERI server due to an exception: {0}"), e.Message) }; } } @@ -243,7 +246,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to retrieve the data source information: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}" + Message = string.Format(TB("Failed to retrieve the data source information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase) }; } @@ -253,7 +256,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the data source information: the ERI server did not return a valid response." + Message = TB("Failed to retrieve the data source information: the ERI server did not return a valid response.") }; } @@ -268,7 +271,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the data source information: the request was canceled either by the user or due to a timeout." + Message = TB("Failed to retrieve the data source information: the request was canceled either by the user or due to a timeout.") }; } catch (Exception e) @@ -276,7 +279,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to retrieve the data source information due to an exception: {e.Message}" + Message = string.Format(TB("Failed to retrieve the data source information due to an exception: {0}"), e.Message) }; } } @@ -294,7 +297,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to retrieve the embedding information: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}" + Message = string.Format(TB("Failed to retrieve the embedding information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase) }; } @@ -304,7 +307,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the embedding information: the ERI server did not return a valid response." + Message = TB("Failed to retrieve the embedding information: the ERI server did not return a valid response.") }; } @@ -319,7 +322,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the embedding information: the request was canceled either by the user or due to a timeout." + Message = TB("Failed to retrieve the embedding information: the request was canceled either by the user or due to a timeout.") }; } catch (Exception e) @@ -327,7 +330,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to retrieve the embedding information due to an exception: {e.Message}" + Message = string.Format(TB("Failed to retrieve the embedding information due to an exception: {0}"), e.Message) }; } } @@ -345,7 +348,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to retrieve the retrieval information: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}" + Message = string.Format(TB("Failed to retrieve the retrieval information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase) }; } @@ -355,7 +358,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the retrieval information: the ERI server did not return a valid response." + Message = TB("Failed to retrieve the retrieval information: the ERI server did not return a valid response.") }; } @@ -370,7 +373,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the retrieval information: the request was canceled either by the user or due to a timeout." + Message = TB("Failed to retrieve the retrieval information: the request was canceled either by the user or due to a timeout.") }; } catch (Exception e) @@ -378,7 +381,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to retrieve the retrieval information due to an exception: {e.Message}" + Message = string.Format(TB("Failed to retrieve the retrieval information due to an exception: {0}"), e.Message) }; } } @@ -399,7 +402,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to execute the retrieval request: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}" + Message = string.Format(TB("Failed to execute the retrieval request: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase) }; } @@ -409,7 +412,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to execute the retrieval request: the ERI server did not return a valid response." + Message = TB("Failed to execute the retrieval request: the ERI server did not return a valid response.") }; } @@ -424,7 +427,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to execute the retrieval request: the request was canceled either by the user or due to a timeout." + Message = TB("Failed to execute the retrieval request: the request was canceled either by the user or due to a timeout.") }; } catch (Exception e) @@ -432,7 +435,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to execute the retrieval request due to an exception: {e.Message}" + Message = string.Format(TB("Failed to execute the retrieval request due to an exception: {0}"), e.Message) }; } } @@ -450,7 +453,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to retrieve the security requirements: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}" + Message = string.Format(TB("Failed to retrieve the security requirements: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase) }; } @@ -460,7 +463,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the security requirements: the ERI server did not return a valid response." + Message = TB("Failed to retrieve the security requirements: the ERI server did not return a valid response.") }; } @@ -475,7 +478,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = "Failed to retrieve the security requirements: the request was canceled either by the user or due to a timeout." + Message = TB("Failed to retrieve the security requirements: the request was canceled either by the user or due to a timeout.") }; } catch (Exception e) @@ -483,7 +486,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), return new() { Successful = false, - Message = $"Failed to retrieve the security requirements due to an exception: {e.Message}" + Message = string.Format(TB("Failed to retrieve the security requirements due to an exception: {0}"), e.Message) }; } } diff --git a/app/MindWork AI Studio/Tools/PluginSystem/I18N.cs b/app/MindWork AI Studio/Tools/PluginSystem/I18N.cs index c327da48..869f01ca 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/I18N.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/I18N.cs @@ -5,7 +5,7 @@ public class I18N : ILang public static readonly I18N I = new(); private static readonly ILogger LOG = Program.LOGGER_FACTORY.CreateLogger(); - private ILanguagePlugin language = PluginFactory.BaseLanguage; + private ILanguagePlugin? language = PluginFactory.BaseLanguage; private I18N() { @@ -18,12 +18,18 @@ public class I18N : ILang public string T(string fallbackEN) { LOG.LogWarning("Using I18N.I.T without namespace and type is probably wrong, because the I18N key collection process of the build system will not find those keys."); - return this.GetText(this.language, fallbackEN); + if(this.language is not null) + return this.GetText(this.language, fallbackEN); + + return fallbackEN; } public string T(string fallbackEN, string? typeNamespace, string? typeName) { - return this.GetText(this.language, fallbackEN, typeNamespace, typeName); + if(this.language is not null) + return this.GetText(this.language, fallbackEN, typeNamespace, typeName); + + return fallbackEN; } #endregion diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginBase.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginBase.cs index 2674d4db..e6e8707a 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginBase.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginBase.cs @@ -8,6 +8,8 @@ namespace AIStudio.Tools.PluginSystem; /// public abstract partial class PluginBase : IPluginMetadata { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PluginBase).Namespace, nameof(PluginBase)); + private readonly IReadOnlyCollection baseIssues; protected readonly LuaState state; @@ -155,21 +157,21 @@ public abstract partial class PluginBase : IPluginMetadata { if (!this.state.Environment["ID"].TryRead(out var idText)) { - message = "The field ID does not exist or is not a valid string."; + message = TB("The field ID does not exist or is not a valid string."); id = Guid.Empty; return false; } if (!Guid.TryParse(idText, out id)) { - message = "The field ID is not a valid GUID / UUID. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)."; + message = TB("The field ID is not a valid GUID / UUID. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)."); id = Guid.Empty; return false; } if(id == Guid.Empty) { - message = "The field ID is empty. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)."; + message = TB("The field ID is empty. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)."); return false; } @@ -187,14 +189,14 @@ public abstract partial class PluginBase : IPluginMetadata { if (!this.state.Environment["NAME"].TryRead(out name)) { - message = "The field NAME does not exist or is not a valid string."; + message = TB("The field NAME does not exist or is not a valid string."); name = string.Empty; return false; } if(string.IsNullOrWhiteSpace(name)) { - message = "The field NAME is empty. The name must be a non-empty string."; + message = TB("The field NAME is empty. The name must be a non-empty string."); return false; } @@ -212,14 +214,14 @@ public abstract partial class PluginBase : IPluginMetadata { if (!this.state.Environment["DESCRIPTION"].TryRead(out description)) { - message = "The field DESCRIPTION does not exist or is not a valid string."; + message = TB("The field DESCRIPTION does not exist or is not a valid string."); description = string.Empty; return false; } if(string.IsNullOrWhiteSpace(description)) { - message = "The field DESCRIPTION is empty. The description must be a non-empty string."; + message = TB("The field DESCRIPTION is empty. The description must be a non-empty string."); return false; } @@ -237,21 +239,21 @@ public abstract partial class PluginBase : IPluginMetadata { if (!this.state.Environment["VERSION"].TryRead(out var versionText)) { - message = "The field VERSION does not exist or is not a valid string."; + message = TB("The field VERSION does not exist or is not a valid string."); version = PluginVersion.NONE; return false; } if (!PluginVersion.TryParse(versionText, out version)) { - message = "The field VERSION is not a valid version number. The version number must be formatted as string in the major.minor.patch format (X.X.X)."; + message = TB("The field VERSION is not a valid version number. The version number must be formatted as string in the major.minor.patch format (X.X.X)."); version = PluginVersion.NONE; return false; } if(version == PluginVersion.NONE) { - message = "The field VERSION is empty. The version number must be formatted as string in the major.minor.patch format (X.X.X)."; + message = TB("The field VERSION is empty. The version number must be formatted as string in the major.minor.patch format (X.X.X)."); return false; } @@ -270,7 +272,7 @@ public abstract partial class PluginBase : IPluginMetadata if (!this.state.Environment["AUTHORS"].TryRead(out var authorsTable)) { authors = []; - message = "The table AUTHORS does not exist or is using an invalid syntax."; + message = TB("The table AUTHORS does not exist or is using an invalid syntax."); return false; } @@ -282,7 +284,7 @@ public abstract partial class PluginBase : IPluginMetadata authors = authorList.ToArray(); if(authorList.Count == 0) { - message = "The table AUTHORS is empty. At least one author must be specified."; + message = TB("The table AUTHORS is empty. At least one author must be specified."); return false; } @@ -301,13 +303,13 @@ public abstract partial class PluginBase : IPluginMetadata if (!this.state.Environment["SUPPORT_CONTACT"].TryRead(out contact)) { contact = string.Empty; - message = "The field SUPPORT_CONTACT does not exist or is not a valid string."; + message = TB("The field SUPPORT_CONTACT does not exist or is not a valid string."); return false; } if(string.IsNullOrWhiteSpace(contact)) { - message = "The field SUPPORT_CONTACT is empty. The support contact must be a non-empty string."; + message = TB("The field SUPPORT_CONTACT is empty. The support contact must be a non-empty string."); return false; } @@ -326,14 +328,14 @@ public abstract partial class PluginBase : IPluginMetadata if (!this.state.Environment["SOURCE_URL"].TryRead(out url)) { url = string.Empty; - message = "The field SOURCE_URL does not exist or is not a valid string."; + message = TB("The field SOURCE_URL does not exist or is not a valid string."); return false; } if (!url.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) && !url.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase)) { url = string.Empty; - message = "The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'."; + message = TB("The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'."); return false; } @@ -352,7 +354,7 @@ public abstract partial class PluginBase : IPluginMetadata if (!this.state.Environment["CATEGORIES"].TryRead(out var categoriesTable)) { categories = []; - message = "The table CATEGORIES does not exist or is using an invalid syntax."; + message = TB("The table CATEGORIES does not exist or is using an invalid syntax."); return false; } @@ -365,7 +367,7 @@ public abstract partial class PluginBase : IPluginMetadata categories = categoryList.ToArray(); if(categoryList.Count == 0) { - message = $"The table CATEGORIES is empty. At least one category is necessary. Valid categories are: {CommonTools.GetAllEnumValues(PluginCategory.NONE)}."; + message = string.Format(TB("The table CATEGORIES is empty. At least one category is necessary. Valid categories are: {0}."), CommonTools.GetAllEnumValues(PluginCategory.NONE)); return false; } @@ -384,7 +386,7 @@ public abstract partial class PluginBase : IPluginMetadata if (!this.state.Environment["TARGET_GROUPS"].TryRead(out var targetGroupsTable)) { targetGroups = []; - message = "The table TARGET_GROUPS does not exist or is using an invalid syntax."; + message = TB("The table TARGET_GROUPS does not exist or is using an invalid syntax."); return false; } @@ -397,7 +399,7 @@ public abstract partial class PluginBase : IPluginMetadata targetGroups = targetGroupList.ToArray(); if(targetGroups.Length == 0) { - message = "The table TARGET_GROUPS is empty or is not a valid table of strings. Valid target groups are: {CommonTools.GetAllEnumValues(PluginTargetGroup.NONE)}."; + message = string.Format(TB("The table TARGET_GROUPS is empty or is not a valid table of strings. Valid target groups are: {0}."), CommonTools.GetAllEnumValues(PluginTargetGroup.NONE)); return false; } @@ -416,7 +418,7 @@ public abstract partial class PluginBase : IPluginMetadata if (!this.state.Environment["IS_MAINTAINED"].TryRead(out isMaintained)) { isMaintained = false; - message = "The field IS_MAINTAINED does not exist or is not a valid boolean."; + message = TB("The field IS_MAINTAINED does not exist or is not a valid boolean."); return false; } @@ -435,7 +437,7 @@ public abstract partial class PluginBase : IPluginMetadata if (!this.state.Environment["DEPRECATION_MESSAGE"].TryRead(out deprecationMessage)) { deprecationMessage = string.Empty; - message = "The field DEPRECATION_MESSAGE does not exist, is not a valid string. This message is optional: use an empty string to indicate that the plugin is not deprecated."; + message = TB("The field DEPRECATION_MESSAGE does not exist, is not a valid string. This message is optional: use an empty string to indicate that the plugin is not deprecated."); return false; } @@ -453,7 +455,7 @@ public abstract partial class PluginBase : IPluginMetadata { if (!this.state.Environment["UI_TEXT_CONTENT"].TryRead(out var textTable)) { - message = "The UI_TEXT_CONTENT table does not exist or is not a valid table."; + message = TB("The UI_TEXT_CONTENT table does not exist or is not a valid table."); pluginContent = []; return false; } diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginCategoryExtensions.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginCategoryExtensions.cs index 35303c06..ef8dd37d 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginCategoryExtensions.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginCategoryExtensions.cs @@ -2,37 +2,39 @@ namespace AIStudio.Tools.PluginSystem; public static class PluginCategoryExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PluginCategoryExtensions).Namespace, nameof(PluginCategoryExtensions)); + public static string GetName(this PluginCategory type) => type switch { - PluginCategory.NONE => "None", - PluginCategory.CORE => "AI Studio Core", + PluginCategory.NONE => TB("None"), + PluginCategory.CORE => TB("AI Studio Core"), - PluginCategory.BUSINESS => "Business", - PluginCategory.INDUSTRY => "Industry", - PluginCategory.UTILITY => "Utility", - PluginCategory.SOFTWARE_DEVELOPMENT => "Software Development", - PluginCategory.GAMING => "Gaming", - PluginCategory.EDUCATION => "Education", - PluginCategory.ENTERTAINMENT => "Entertainment", - PluginCategory.SOCIAL => "Social", - PluginCategory.SHOPPING => "Shopping", - PluginCategory.TRAVEL => "Travel", - PluginCategory.HEALTH => "Health", - PluginCategory.FITNESS => "Fitness", - PluginCategory.FOOD => "Food", - PluginCategory.PARTY => "Party", - PluginCategory.SPORTS => "Sports", - PluginCategory.NEWS => "News", - PluginCategory.WEATHER => "Weather", - PluginCategory.MUSIC => "Music", - PluginCategory.POLITICAL => "Political", - PluginCategory.SCIENCE => "Science", - PluginCategory.TECHNOLOGY => "Technology", - PluginCategory.ART => "Art", - PluginCategory.FICTION => "Fiction", - PluginCategory.WRITING => "Writing", - PluginCategory.CONTENT_CREATION => "Content Creation", + PluginCategory.BUSINESS => TB("Business"), + PluginCategory.INDUSTRY => TB("Industry"), + PluginCategory.UTILITY => TB("Utility"), + PluginCategory.SOFTWARE_DEVELOPMENT => TB("Software Development"), + PluginCategory.GAMING => TB("Gaming"), + PluginCategory.EDUCATION => TB("Education"), + PluginCategory.ENTERTAINMENT => TB("Entertainment"), + PluginCategory.SOCIAL => TB("Social"), + PluginCategory.SHOPPING => TB("Shopping"), + PluginCategory.TRAVEL => TB("Travel"), + PluginCategory.HEALTH => TB("Health"), + PluginCategory.FITNESS => TB("Fitness"), + PluginCategory.FOOD => TB("Food"), + PluginCategory.PARTY => TB("Party"), + PluginCategory.SPORTS => TB("Sports"), + PluginCategory.NEWS => TB("News"), + PluginCategory.WEATHER => TB("Weather"), + PluginCategory.MUSIC => TB("Music"), + PluginCategory.POLITICAL => TB("Political"), + PluginCategory.SCIENCE => TB("Science"), + PluginCategory.TECHNOLOGY => TB("Technology"), + PluginCategory.ART => TB("Art"), + PluginCategory.FICTION => TB("Fiction"), + PluginCategory.WRITING => TB("Writing"), + PluginCategory.CONTENT_CREATION => TB("Content Creation"), - _ => "Unknown plugin category", + _ => TB("Unknown plugin category"), }; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginLanguage.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginLanguage.cs index f1a8ce5b..d3dcb8de 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginLanguage.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginLanguage.cs @@ -4,6 +4,7 @@ namespace AIStudio.Tools.PluginSystem; public sealed class PluginLanguage : PluginBase, ILanguagePlugin { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PluginLanguage).Namespace, nameof(PluginLanguage)); private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); private readonly Dictionary content = []; @@ -53,28 +54,28 @@ public sealed class PluginLanguage : PluginBase, ILanguagePlugin { if (!this.state.Environment["IETF_TAG"].TryRead(out readLangCultureTag)) { - message = "The field IETF_TAG does not exist or is not a valid string."; + message = TB("The field IETF_TAG does not exist or is not a valid string."); readLangCultureTag = string.Empty; return false; } if (string.IsNullOrWhiteSpace(readLangCultureTag)) { - message = "The field IETF_TAG is empty. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."; + message = TB("The field IETF_TAG is empty. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."); readLangCultureTag = string.Empty; return false; } if (readLangCultureTag.Length != 5) { - message = "The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."; + message = TB("The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."); readLangCultureTag = string.Empty; return false; } if (readLangCultureTag[2] != '-') { - message = "The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."; + message = TB("The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."); readLangCultureTag = string.Empty; return false; } @@ -83,7 +84,7 @@ public sealed class PluginLanguage : PluginBase, ILanguagePlugin for (var i = 0; i < 2; i++) if (!char.IsLower(readLangCultureTag[i])) { - message = "The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."; + message = TB("The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."); readLangCultureTag = string.Empty; return false; } @@ -92,7 +93,7 @@ public sealed class PluginLanguage : PluginBase, ILanguagePlugin for (var i = 3; i < 5; i++) if (!char.IsUpper(readLangCultureTag[i])) { - message = "The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."; + message = TB("The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."); readLangCultureTag = string.Empty; return false; } @@ -105,14 +106,14 @@ public sealed class PluginLanguage : PluginBase, ILanguagePlugin { if (!this.state.Environment["LANG_NAME"].TryRead(out readLangName)) { - message = "The field LANG_NAME does not exist or is not a valid string."; + message = TB("The field LANG_NAME does not exist or is not a valid string."); readLangName = string.Empty; return false; } if (string.IsNullOrWhiteSpace(readLangName)) { - message = "The field LANG_NAME is empty. Use a valid language name."; + message = TB("The field LANG_NAME is empty. Use a valid language name."); readLangName = string.Empty; return false; } diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginTargetGroupExtensions.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginTargetGroupExtensions.cs index 7a14123f..7e47a130 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginTargetGroupExtensions.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginTargetGroupExtensions.cs @@ -2,24 +2,26 @@ namespace AIStudio.Tools.PluginSystem; public static class PluginTargetGroupExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PluginTargetGroupExtensions).Namespace, nameof(PluginTargetGroupExtensions)); + public static string Name(this PluginTargetGroup group) => group switch { - PluginTargetGroup.NONE => "No target group", + PluginTargetGroup.NONE => TB("No target group"), - PluginTargetGroup.EVERYONE => "Everyone", - PluginTargetGroup.CHILDREN => "Children", - PluginTargetGroup.TEENAGERS => "Teenagers", - PluginTargetGroup.STUDENTS => "Students", - PluginTargetGroup.ADULTS => "Adults", + PluginTargetGroup.EVERYONE => TB("Everyone"), + PluginTargetGroup.CHILDREN => TB("Children"), + PluginTargetGroup.TEENAGERS => TB("Teenagers"), + PluginTargetGroup.STUDENTS => TB("Students"), + PluginTargetGroup.ADULTS => TB("Adults"), - PluginTargetGroup.INDUSTRIAL_WORKERS => "Industrial workers", - PluginTargetGroup.OFFICE_WORKERS => "Office workers", - PluginTargetGroup.BUSINESS_PROFESSIONALS => "Business professionals", - PluginTargetGroup.SOFTWARE_DEVELOPERS => "Software developers", - PluginTargetGroup.SCIENTISTS => "Scientists", - PluginTargetGroup.TEACHERS => "Teachers", - PluginTargetGroup.ARTISTS => "Artists", + PluginTargetGroup.INDUSTRIAL_WORKERS => TB("Industrial workers"), + PluginTargetGroup.OFFICE_WORKERS => TB("Office workers"), + PluginTargetGroup.BUSINESS_PROFESSIONALS => TB("Business professionals"), + PluginTargetGroup.SOFTWARE_DEVELOPERS => TB("Software developers"), + PluginTargetGroup.SCIENTISTS => TB("Scientists"), + PluginTargetGroup.TEACHERS => TB("Teachers"), + PluginTargetGroup.ARTISTS => TB("Artists"), - _ => "Unknown target group", + _ => TB("Unknown target group"), }; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginTypeExtensions.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginTypeExtensions.cs index b65eb502..b855a144 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginTypeExtensions.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginTypeExtensions.cs @@ -2,14 +2,16 @@ namespace AIStudio.Tools.PluginSystem; public static class PluginTypeExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PluginTypeExtensions).Namespace, nameof(PluginTypeExtensions)); + public static string GetName(this PluginType type) => type switch { - PluginType.LANGUAGE => "Language plugin", - PluginType.ASSISTANT => "Assistant plugin", - PluginType.CONFIGURATION => "Configuration plugin", - PluginType.THEME => "Theme plugin", + PluginType.LANGUAGE => TB("Language plugin"), + PluginType.ASSISTANT => TB("Assistant plugin"), + PluginType.CONFIGURATION => TB("Configuration plugin"), + PluginType.THEME => TB("Theme plugin"), - _ => "Unknown plugin type", + _ => TB("Unknown plugin type"), }; public static string GetDirectory(this PluginType type) => type switch diff --git a/app/MindWork AI Studio/Tools/RAG/AugmentationProcesses/AugmentationOne.cs b/app/MindWork AI Studio/Tools/RAG/AugmentationProcesses/AugmentationOne.cs index fff91251..11a850d4 100644 --- a/app/MindWork AI Studio/Tools/RAG/AugmentationProcesses/AugmentationOne.cs +++ b/app/MindWork AI Studio/Tools/RAG/AugmentationProcesses/AugmentationOne.cs @@ -4,21 +4,24 @@ using AIStudio.Agents; using AIStudio.Chat; using AIStudio.Provider; using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; namespace AIStudio.Tools.RAG.AugmentationProcesses; public sealed class AugmentationOne : IAugmentationProcess { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(AugmentationOne).Namespace, nameof(AugmentationOne)); + #region Implementation of IAugmentationProcess /// public string TechnicalName => "AugmentationOne"; /// - public string UIName => "Standard augmentation process"; + public string UIName => TB("Standard augmentation process"); /// - public string Description => "This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread."; + public string Description => TB("This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread."); /// public async Task ProcessAsync(IProvider provider, IContent lastPrompt, ChatThread chatThread, IReadOnlyList retrievalContexts, CancellationToken token = default) diff --git a/app/MindWork AI Studio/Tools/RAG/DataSourceSelectionProcesses/AgenticSrcSelWithDynHeur.cs b/app/MindWork AI Studio/Tools/RAG/DataSourceSelectionProcesses/AgenticSrcSelWithDynHeur.cs index 76f27892..6d2d4e4e 100644 --- a/app/MindWork AI Studio/Tools/RAG/DataSourceSelectionProcesses/AgenticSrcSelWithDynHeur.cs +++ b/app/MindWork AI Studio/Tools/RAG/DataSourceSelectionProcesses/AgenticSrcSelWithDynHeur.cs @@ -3,21 +3,24 @@ using AIStudio.Chat; using AIStudio.Components; using AIStudio.Provider; using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; namespace AIStudio.Tools.RAG.DataSourceSelectionProcesses; public class AgenticSrcSelWithDynHeur : IDataSourceSelectionProcess { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(AgenticSrcSelWithDynHeur).Namespace, nameof(AgenticSrcSelWithDynHeur)); + #region Implementation of IDataSourceSelectionProcess /// public string TechnicalName => "AgenticSrcSelWithDynHeur"; /// - public string UIName => "Automatic AI data source selection with heuristik source reduction"; + public string UIName => TB("Automatic AI data source selection with heuristik source reduction"); /// - public string Description => "Automatically selects the appropriate data sources based on the last prompt. Applies a heuristic reduction at the end to reduce the number of data sources."; + public string Description => TB("Automatically selects the appropriate data sources based on the last prompt. Applies a heuristic reduction at the end to reduce the number of data sources."); /// public async Task SelectDataSourcesAsync(IProvider provider, IContent lastPrompt, ChatThread chatThread, AllowedSelectedDataSources dataSources, CancellationToken token = default) diff --git a/app/MindWork AI Studio/Tools/RAG/RAGProcesses/AISrcSelWithRetCtxVal.cs b/app/MindWork AI Studio/Tools/RAG/RAGProcesses/AISrcSelWithRetCtxVal.cs index 2736f7b0..fa7cd5f2 100644 --- a/app/MindWork AI Studio/Tools/RAG/RAGProcesses/AISrcSelWithRetCtxVal.cs +++ b/app/MindWork AI Studio/Tools/RAG/RAGProcesses/AISrcSelWithRetCtxVal.cs @@ -2,6 +2,7 @@ using AIStudio.Chat; using AIStudio.Provider; using AIStudio.Settings; using AIStudio.Settings.DataModel; +using AIStudio.Tools.PluginSystem; using AIStudio.Tools.RAG.AugmentationProcesses; using AIStudio.Tools.RAG.DataSourceSelectionProcesses; using AIStudio.Tools.Services; @@ -10,16 +11,18 @@ namespace AIStudio.Tools.RAG.RAGProcesses; public sealed class AISrcSelWithRetCtxVal : IRagProcess { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(AISrcSelWithRetCtxVal).Namespace, nameof(AISrcSelWithRetCtxVal)); + #region Implementation of IRagProcess /// public string TechnicalName => "AISrcSelWithRetCtxVal"; /// - public string UIName => "AI source selection with AI retrieval context validation"; + public string UIName => TB("AI source selection with AI retrieval context validation"); /// - public string Description => "This RAG process filters data sources, automatically selects appropriate sources, optionally allows manual source selection, retrieves data, and automatically validates the retrieval context."; + public string Description => TB("This RAG process filters data sources, automatically selects appropriate sources, optionally allows manual source selection, retrieves data, and automatically validates the retrieval context."); /// public async Task ProcessAsync(IProvider provider, IContent lastPrompt, ChatThread chatThread, CancellationToken token = default) diff --git a/app/MindWork AI Studio/Tools/Rust/FileTypeFilter.cs b/app/MindWork AI Studio/Tools/Rust/FileTypeFilter.cs index 6cd05e61..e542cec6 100644 --- a/app/MindWork AI Studio/Tools/Rust/FileTypeFilter.cs +++ b/app/MindWork AI Studio/Tools/Rust/FileTypeFilter.cs @@ -1,4 +1,7 @@ // ReSharper disable NotAccessedPositionalProperty.Global + +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Tools.Rust; /// @@ -8,11 +11,13 @@ namespace AIStudio.Tools.Rust; /// The file extensions associated with the filter. public readonly record struct FileTypeFilter(string FilterName, string[] FilterExtensions) { - public static FileTypeFilter PDF => new("PDF Files", ["pdf"]); + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(FileTypeFilter).Namespace, nameof(FileTypeFilter)); - public static FileTypeFilter Text => new("Text Files", ["txt", "md"]); + public static FileTypeFilter PDF => new(TB("PDF Files"), ["pdf"]); - public static FileTypeFilter AllOffice => new("All Office Files", ["docx", "xlsx", "pptx", "doc", "xls", "ppt", "pdf"]); + public static FileTypeFilter Text => new(TB("Text Files"), ["txt", "md"]); - public static FileTypeFilter AllImages => new("All Image Files", ["jpg", "jpeg", "png", "gif", "bmp", "tiff"]); + public static FileTypeFilter AllOffice => new(TB("All Office Files"), ["docx", "xlsx", "pptx", "doc", "xls", "ppt", "pdf"]); + + public static FileTypeFilter AllImages => new(TB("All Image Files"), ["jpg", "jpeg", "png", "gif", "bmp", "tiff"]); } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/Services/RustService.APIKeys.cs b/app/MindWork AI Studio/Tools/Services/RustService.APIKeys.cs index 7b89fe9a..256d29fc 100644 --- a/app/MindWork AI Studio/Tools/Services/RustService.APIKeys.cs +++ b/app/MindWork AI Studio/Tools/Services/RustService.APIKeys.cs @@ -1,9 +1,12 @@ +using AIStudio.Tools.PluginSystem; using AIStudio.Tools.Rust; namespace AIStudio.Tools.Services; public sealed partial class RustService { + private static string TB_APIKeys(string fallbackEN) => I18N.I.T(fallbackEN, typeof(RustService).Namespace, $"{nameof(RustService)}.APIKeys"); + /// /// Try to get the API key for the given secret ID. /// @@ -12,13 +15,15 @@ public sealed partial class RustService /// The requested secret. public async Task GetAPIKey(ISecretId secretId, bool isTrying = false) { + static string TB(string fallbackEN) => TB_APIKeys(fallbackEN); + var secretRequest = new SelectSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, isTrying); var result = await this.http.PostAsJsonAsync("/secrets/get", secretRequest, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { if(!isTrying) this.logger!.LogError($"Failed to get the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'"); - return new RequestedSecret(false, new EncryptedText(string.Empty), "Failed to get the API key due to an API issue."); + return new RequestedSecret(false, new EncryptedText(string.Empty), TB("Failed to get the API key due to an API issue.")); } var secret = await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); @@ -36,13 +41,15 @@ public sealed partial class RustService /// The store secret response. public async Task SetAPIKey(ISecretId secretId, string key) { + static string TB(string fallbackEN) => TB_APIKeys(fallbackEN); + var encryptedKey = await this.encryptor!.Encrypt(key); var request = new StoreSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, encryptedKey); var result = await this.http.PostAsJsonAsync("/secrets/store", request, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { this.logger!.LogError($"Failed to store the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'"); - return new StoreSecretResponse(false, "Failed to get the API key due to an API issue."); + return new StoreSecretResponse(false, TB("Failed to get the API key due to an API issue.")); } var state = await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); @@ -59,12 +66,14 @@ public sealed partial class RustService /// The delete secret response. public async Task DeleteAPIKey(ISecretId secretId) { + static string TB(string fallbackEN) => TB_APIKeys(fallbackEN); + var request = new SelectSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, false); var result = await this.http.PostAsJsonAsync("/secrets/delete", request, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { this.logger!.LogError($"Failed to delete the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'"); - return new DeleteSecretResponse{Success = false, WasEntryFound = false, Issue = "Failed to delete the API key due to an API issue."}; + return new DeleteSecretResponse{Success = false, WasEntryFound = false, Issue = TB("Failed to delete the API key due to an API issue.")}; } var state = await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); diff --git a/app/MindWork AI Studio/Tools/Services/RustService.Clipboard.cs b/app/MindWork AI Studio/Tools/Services/RustService.Clipboard.cs index 9a1b6017..09fad915 100644 --- a/app/MindWork AI Studio/Tools/Services/RustService.Clipboard.cs +++ b/app/MindWork AI Studio/Tools/Services/RustService.Clipboard.cs @@ -1,9 +1,12 @@ +using AIStudio.Tools.PluginSystem; using AIStudio.Tools.Rust; namespace AIStudio.Tools.Services; public sealed partial class RustService { + private static string TB_Clipboard(string fallbackEN) => I18N.I.T(fallbackEN, typeof(RustService).Namespace, $"{nameof(RustService)}.Clipboard"); + /// /// Tries to copy the given text to the clipboard. /// @@ -11,7 +14,9 @@ public sealed partial class RustService /// The text to copy to the clipboard. public async Task CopyText2Clipboard(ISnackbar snackbar, string text) { - var message = "Successfully copied the text to your clipboard"; + static string TB(string fallbackEN) => TB_Clipboard(fallbackEN); + + var message = TB("Successfully copied the text to your clipboard"); var iconColor = Color.Error; var severity = Severity.Error; try @@ -21,7 +26,7 @@ public sealed partial class RustService if (!response.IsSuccessStatusCode) { this.logger!.LogError($"Failed to copy the text to the clipboard due to an network error: '{response.StatusCode}'"); - message = "Failed to copy the text to your clipboard."; + message = TB("Failed to copy the text to your clipboard."); return; } @@ -29,7 +34,7 @@ public sealed partial class RustService if (!state.Success) { this.logger!.LogError("Failed to copy the text to the clipboard."); - message = "Failed to copy the text to your clipboard."; + message = TB("Failed to copy the text to your clipboard."); return; } diff --git a/app/MindWork AI Studio/Tools/Services/RustService.Secrets.cs b/app/MindWork AI Studio/Tools/Services/RustService.Secrets.cs index b41806e1..da9db35f 100644 --- a/app/MindWork AI Studio/Tools/Services/RustService.Secrets.cs +++ b/app/MindWork AI Studio/Tools/Services/RustService.Secrets.cs @@ -1,9 +1,12 @@ +using AIStudio.Tools.PluginSystem; using AIStudio.Tools.Rust; namespace AIStudio.Tools.Services; public sealed partial class RustService { + private static string TB_Secrets(string fallbackEN) => I18N.I.T(fallbackEN, typeof(RustService).Namespace, $"{nameof(RustService)}.Secrets"); + /// /// Try to get the secret data for the given secret ID. /// @@ -12,13 +15,15 @@ public sealed partial class RustService /// The requested secret. public async Task GetSecret(ISecretId secretId, bool isTrying = false) { + static string TB(string fallbackEN) => TB_Secrets(fallbackEN); + var secretRequest = new SelectSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, isTrying); var result = await this.http.PostAsJsonAsync("/secrets/get", secretRequest, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { if(!isTrying) this.logger!.LogError($"Failed to get the secret data for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'"); - return new RequestedSecret(false, new EncryptedText(string.Empty), "Failed to get the secret data due to an API issue."); + return new RequestedSecret(false, new EncryptedText(string.Empty), TB("Failed to get the secret data due to an API issue.")); } var secret = await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); @@ -36,13 +41,15 @@ public sealed partial class RustService /// The store secret response. public async Task SetSecret(ISecretId secretId, string secretData) { + static string TB(string fallbackEN) => TB_Secrets(fallbackEN); + var encryptedSecret = await this.encryptor!.Encrypt(secretData); var request = new StoreSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, encryptedSecret); var result = await this.http.PostAsJsonAsync("/secrets/store", request, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { this.logger!.LogError($"Failed to store the secret data for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'"); - return new StoreSecretResponse(false, "Failed to get the secret data due to an API issue."); + return new StoreSecretResponse(false, TB("Failed to get the secret data due to an API issue.")); } var state = await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); @@ -59,12 +66,14 @@ public sealed partial class RustService /// The delete secret response. public async Task DeleteSecret(ISecretId secretId) { + static string TB(string fallbackEN) => TB_Secrets(fallbackEN); + var request = new SelectSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, false); var result = await this.http.PostAsJsonAsync("/secrets/delete", request, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { this.logger!.LogError($"Failed to delete the secret data for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'"); - return new DeleteSecretResponse{Success = false, WasEntryFound = false, Issue = "Failed to delete the secret data due to an API issue."}; + return new DeleteSecretResponse{Success = false, WasEntryFound = false, Issue = TB("Failed to delete the secret data due to an API issue.")}; } var state = await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); diff --git a/app/MindWork AI Studio/Tools/Services/UpdateService.cs b/app/MindWork AI Studio/Tools/Services/UpdateService.cs index ecabbd7e..7cda6443 100644 --- a/app/MindWork AI Studio/Tools/Services/UpdateService.cs +++ b/app/MindWork AI Studio/Tools/Services/UpdateService.cs @@ -1,5 +1,6 @@ using AIStudio.Settings; using AIStudio.Settings.DataModel; +using AIStudio.Tools.PluginSystem; using Microsoft.AspNetCore.Components; @@ -7,6 +8,8 @@ namespace AIStudio.Tools.Services; public sealed class UpdateService : BackgroundService, IMessageBusReceiver { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(UpdateService).Namespace, nameof(UpdateService)); + private static bool IS_INITIALIZED; private static ISnackbar? SNACKBAR; @@ -118,7 +121,7 @@ public sealed class UpdateService : BackgroundService, IMessageBusReceiver { if (notifyUserWhenNoUpdate) { - SNACKBAR!.Add("No update found.", Severity.Normal, config => + SNACKBAR!.Add(TB("No update found."), Severity.Normal, config => { config.Icon = Icons.Material.Filled.Update; config.IconSize = Size.Large; diff --git a/app/MindWork AI Studio/Tools/Validation/DataSourceValidation.cs b/app/MindWork AI Studio/Tools/Validation/DataSourceValidation.cs index d97edb31..a761ed08 100644 --- a/app/MindWork AI Studio/Tools/Validation/DataSourceValidation.cs +++ b/app/MindWork AI Studio/Tools/Validation/DataSourceValidation.cs @@ -1,10 +1,13 @@ using AIStudio.Settings.DataModel; using AIStudio.Tools.ERIClient.DataModel; +using AIStudio.Tools.PluginSystem; namespace AIStudio.Tools.Validation; public sealed class DataSourceValidation { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(DataSourceValidation).Namespace, nameof(DataSourceValidation)); + public Func GetSecretStorageIssue { get; init; } = () => string.Empty; public Func GetPreviousDataSourceName { get; init; } = () => string.Empty; @@ -26,13 +29,13 @@ public sealed class DataSourceValidation public string? ValidatingHostname(string hostname) { if(string.IsNullOrWhiteSpace(hostname)) - return "Please enter a hostname, e.g., http://localhost"; + return TB("Please enter a hostname, e.g., http://localhost"); if(!hostname.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) && !hostname.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase)) - return "The hostname must start with either http:// or https://"; + return TB("The hostname must start with either http:// or https://"); if(!Uri.TryCreate(hostname, UriKind.Absolute, out _)) - return "The hostname is not a valid HTTP(S) URL."; + return TB("The hostname is not a valid HTTP(S) URL."); return null; } @@ -40,7 +43,7 @@ public sealed class DataSourceValidation public string? ValidatePort(int port) { if(port is < 1 or > 65535) - return "The port must be between 1 and 65535."; + return TB("The port must be between 1 and 65535."); return null; } @@ -48,14 +51,14 @@ public sealed class DataSourceValidation public string? ValidateSecurityPolicy(DataSourceSecurity securityPolicy) { if(securityPolicy is DataSourceSecurity.NOT_SPECIFIED) - return "Please select your security policy."; + return TB("Please select your security policy."); var dataSourceSecurity = this.GetSecurityRequirements(); if (dataSourceSecurity is null) return null; if(dataSourceSecurity.Value.AllowedProviderType is ProviderType.SELF_HOSTED && securityPolicy is not DataSourceSecurity.SELF_HOSTED) - return "This data source can only be used with a self-hosted LLM provider. Please change the security policy."; + return TB("This data source can only be used with a self-hosted LLM provider. Please change the security policy."); return null; } @@ -66,7 +69,7 @@ public sealed class DataSourceValidation return null; if(string.IsNullOrWhiteSpace(username)) - return "The username must not be empty."; + return TB("The username must not be empty."); return null; } @@ -84,10 +87,10 @@ public sealed class DataSourceValidation if (string.IsNullOrWhiteSpace(secret)) return authMethod switch { - AuthMethod.TOKEN => "Please enter your secure access token.", - AuthMethod.USERNAME_PASSWORD => "Please enter your password.", + AuthMethod.TOKEN => TB("Please enter your secure access token."), + AuthMethod.USERNAME_PASSWORD => TB("Please enter your password."), - _ => "Please enter the secret necessary for authentication." + _ => TB("Please enter the secret necessary for authentication.") }; return null; @@ -96,7 +99,7 @@ public sealed class DataSourceValidation public string? ValidateRetrievalProcess(RetrievalInfo retrievalInfo) { if(retrievalInfo == default) - return "Please select one retrieval process."; + return TB("Please select one retrieval process."); return null; } @@ -104,14 +107,14 @@ public sealed class DataSourceValidation public string? ValidatingName(string dataSourceName) { if(string.IsNullOrWhiteSpace(dataSourceName)) - return "The name must not be empty."; + return TB("The name must not be empty."); if (dataSourceName.Length > 40) - return "The name must not exceed 40 characters."; + return TB("The name must not exceed 40 characters."); var lowerName = dataSourceName.ToLowerInvariant(); if(lowerName != this.GetPreviousDataSourceName() && this.GetUsedDataSourceNames().Contains(lowerName)) - return "The name is already used by another data source. Please choose a different name."; + return TB("The name is already used by another data source. Please choose a different name."); return null; } @@ -119,10 +122,10 @@ public sealed class DataSourceValidation public string? ValidatePath(string path) { if(string.IsNullOrWhiteSpace(path)) - return "The path must not be empty. Please select a directory."; + return TB("The path must not be empty. Please select a directory."); if(!Directory.Exists(path)) - return "The path does not exist. Please select a valid directory."; + return TB("The path does not exist. Please select a valid directory."); return null; } @@ -130,10 +133,10 @@ public sealed class DataSourceValidation public string? ValidateFilePath(string filePath) { if(string.IsNullOrWhiteSpace(filePath)) - return "The file path must not be empty. Please select a file."; + return TB("The file path must not be empty. Please select a file."); if(!File.Exists(filePath)) - return "The file does not exist. Please select a valid file."; + return TB("The file does not exist. Please select a valid file."); return null; } @@ -141,7 +144,7 @@ public sealed class DataSourceValidation public string? ValidateEmbeddingId(string embeddingId) { if(string.IsNullOrWhiteSpace(embeddingId)) - return "Please select an embedding provider."; + return TB("Please select an embedding provider."); return null; } @@ -149,7 +152,7 @@ public sealed class DataSourceValidation public string? ValidateUserAcknowledgedCloudEmbedding(bool value) { if(this.GetSelectedCloudEmbedding() && !value) - return "Please acknowledge that you are aware of the cloud embedding implications."; + return TB("Please acknowledge that you are aware of the cloud embedding implications."); return null; } @@ -157,10 +160,10 @@ public sealed class DataSourceValidation public string? ValidateTestedConnection() { if(!this.GetTestedConnection()) - return "Please test the connection before saving."; + return TB("Please test the connection before saving."); if(!this.GetTestedConnectionResult()) - return "The connection test failed. Please check the connection settings."; + return TB("The connection test failed. Please check the connection settings."); return null; } @@ -168,7 +171,7 @@ public sealed class DataSourceValidation public string? ValidateAuthMethod(AuthMethod authMethod) { if(!this.GetAvailableAuthMethods().Contains(authMethod)) - return "Please select one valid authentication method."; + return TB("Please select one valid authentication method."); return null; } diff --git a/app/MindWork AI Studio/Tools/Validation/ProviderValidation.cs b/app/MindWork AI Studio/Tools/Validation/ProviderValidation.cs index 9205b1ef..aa6217b0 100644 --- a/app/MindWork AI Studio/Tools/Validation/ProviderValidation.cs +++ b/app/MindWork AI Studio/Tools/Validation/ProviderValidation.cs @@ -1,11 +1,15 @@ using AIStudio.Provider; using AIStudio.Provider.HuggingFace; +using AIStudio.Tools.PluginSystem; + using Host = AIStudio.Provider.SelfHosted.Host; namespace AIStudio.Tools.Validation; public sealed class ProviderValidation { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ProviderValidation).Namespace, nameof(ProviderValidation)); + public Func GetProvider { get; init; } = () => LLMProviders.NONE; public Func GetAPIKeyStorageIssue { get; init; } = () => string.Empty; @@ -22,13 +26,13 @@ public sealed class ProviderValidation return null; if(string.IsNullOrWhiteSpace(hostname)) - return "Please enter a hostname, e.g., http://localhost:1234"; + return TB("Please enter a hostname, e.g., http://localhost:1234"); if(!hostname.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) && !hostname.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase)) - return "The hostname must start with either http:// or https://"; + return TB("The hostname must start with either http:// or https://"); if(!Uri.TryCreate(hostname, UriKind.Absolute, out _)) - return "The hostname is not a valid HTTP(S) URL."; + return TB("The hostname is not a valid HTTP(S) URL."); return null; } @@ -43,7 +47,7 @@ public sealed class ProviderValidation return apiKeyStorageIssue; if(string.IsNullOrWhiteSpace(apiKey)) - return "Please enter an API key."; + return TB("Please enter an API key."); return null; } @@ -51,15 +55,15 @@ public sealed class ProviderValidation public string? ValidatingInstanceName(string instanceName) { if (string.IsNullOrWhiteSpace(instanceName)) - return "Please enter an instance name."; + return TB("Please enter an instance name."); if (instanceName.Length > 40) - return "The instance name must not exceed 40 characters."; + return TB("The instance name must not exceed 40 characters."); // The instance name must be unique: var lowerInstanceName = instanceName.ToLowerInvariant(); if (lowerInstanceName != this.GetPreviousInstanceName() && this.GetUsedInstanceNames().Contains(lowerInstanceName)) - return "The instance name must be unique; the chosen name is already in use."; + return TB("The instance name must be unique; the chosen name is already in use."); return null; } @@ -70,7 +74,7 @@ public sealed class ProviderValidation return null; if (model == default) - return "Please select a model."; + return TB("Please select a model."); return null; } @@ -78,7 +82,7 @@ public sealed class ProviderValidation public string? ValidatingProvider(LLMProviders llmProvider) { if (llmProvider == LLMProviders.NONE) - return "Please select a provider."; + return TB("Please select a provider."); return null; } @@ -89,7 +93,7 @@ public sealed class ProviderValidation return null; if (host == Host.NONE) - return "Please select a host."; + return TB("Please select a host."); return null; } @@ -100,7 +104,7 @@ public sealed class ProviderValidation return null; if (inferenceProvider is HFInferenceProvider.NONE) - return "Please select an Hugging Face inference provider."; + return TB("Please select an Hugging Face inference provider."); return null; } diff --git a/app/MindWork AI Studio/Tools/WorkspaceBehaviour.cs b/app/MindWork AI Studio/Tools/WorkspaceBehaviour.cs index a054232f..00a6d68f 100644 --- a/app/MindWork AI Studio/Tools/WorkspaceBehaviour.cs +++ b/app/MindWork AI Studio/Tools/WorkspaceBehaviour.cs @@ -5,11 +5,14 @@ using System.Text.Json.Serialization; using AIStudio.Chat; using AIStudio.Dialogs; using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; namespace AIStudio.Tools; public static class WorkspaceBehaviour { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(WorkspaceBehaviour).Namespace, nameof(WorkspaceBehaviour)); + public static readonly JsonSerializerOptions JSON_OPTIONS = new() { WriteIndented = true, @@ -97,13 +100,13 @@ public static class WorkspaceBehaviour { "Message", (chat.WorkspaceId == Guid.Empty) switch { - true => $"Are you sure you want to delete the temporary chat '{chat.Name}'?", - false => $"Are you sure you want to delete the chat '{chat.Name}' in the workspace '{workspaceName}'?", + true => TB($"Are you sure you want to delete the temporary chat '{chat.Name}'?"), + false => TB($"Are you sure you want to delete the chat '{chat.Name}' in the workspace '{workspaceName}'?"), } }, }; - var dialogReference = await dialogService.ShowAsync("Delete Chat", dialogParameters, Dialogs.DialogOptions.FULLSCREEN); + var dialogReference = await dialogService.ShowAsync(TB("Delete Chat"), dialogParameters, Dialogs.DialogOptions.FULLSCREEN); var dialogResult = await dialogReference.Result; if (dialogResult is null || dialogResult.Canceled) return;