feat: auto detect language (#947)

* added auto-detect language

* fix(TranslationSelect) now saving the selected language between sessions

* fix(LangSelector.spec)

* fix(conflict)

* fix(Swedish) sv-SE
This commit is contained in:
Marco Beretta 2023-09-18 21:40:20 +02:00 committed by GitHub
parent 2419af8748
commit b48c618f32
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 329 additions and 328 deletions

View file

@ -36,7 +36,7 @@ export default function Settings({ open, onOpenChange }: TDialogProps) {
> >
<Tabs.Trigger <Tabs.Trigger
className={cn( className={cn(
'group flex items-center justify-start gap-2 rounded-md px-2 py-1.5 text-sm radix-state-active:bg-gray-800 radix-state-active:text-white', 'group flex items-center justify-start gap-2 rounded-md px-2 py-1.5 text-sm text-gray-500 radix-state-active:bg-gray-800 radix-state-active:text-white',
isSmallScreen isSmallScreen
? 'flex-1 items-center justify-center text-sm dark:text-gray-500 dark:radix-state-active:text-white' ? 'flex-1 items-center justify-center text-sm dark:text-gray-500 dark:radix-state-active:text-white'
: '', : '',
@ -48,7 +48,7 @@ export default function Settings({ open, onOpenChange }: TDialogProps) {
</Tabs.Trigger> </Tabs.Trigger>
<Tabs.Trigger <Tabs.Trigger
className={cn( className={cn(
'group flex items-center justify-start gap-2 rounded-md px-2 py-1.5 text-sm radix-state-active:bg-gray-800 radix-state-active:text-white', 'group flex items-center justify-start gap-2 rounded-md px-2 py-1.5 text-sm text-gray-500 radix-state-active:bg-gray-800 radix-state-active:text-white',
isSmallScreen isSmallScreen
? 'flex-1 items-center justify-center text-sm dark:text-gray-500 dark:radix-state-active:text-white' ? 'flex-1 items-center justify-center text-sm dark:text-gray-500 dark:radix-state-active:text-white'
: '', : '',

View file

@ -12,6 +12,7 @@ import {
import type { TDangerButtonProps } from '~/common'; import type { TDangerButtonProps } from '~/common';
import DangerButton from './DangerButton'; import DangerButton from './DangerButton';
import store from '~/store'; import store from '~/store';
import useLocalStorage from '~/hooks/useLocalStorage';
export const ThemeSelector = ({ export const ThemeSelector = ({
theme, theme,
@ -82,17 +83,18 @@ export const LangSelector = ({
onChange={(e) => onChange(e.target.value)} onChange={(e) => onChange(e.target.value)}
value={langcode} value={langcode}
> >
<option value="en">{localize('com_nav_lang_english')}</option> <option value="auto">{localize('com_nav_lang_auto')}</option>
<option value="cn">{localize('com_nav_lang_chinese')}</option> <option value="en-US">{localize('com_nav_lang_english')}</option>
<option value="de">{localize('com_nav_lang_german')}</option> <option value="zh-CN">{localize('com_nav_lang_chinese')}</option>
<option value="es">{localize('com_nav_lang_spanish')}</option> <option value="de-DE">{localize('com_nav_lang_german')}</option>
<option value="fr">{localize('com_nav_lang_french')}</option> <option value="es-ES">{localize('com_nav_lang_spanish')}</option>
<option value="it">{localize('com_nav_lang_italian')}</option> <option value="fr-FR">{localize('com_nav_lang_french')}</option>
<option value="pl">{localize('com_nav_lang_polish')}</option> <option value="it-IT">{localize('com_nav_lang_italian')}</option>
<option value="br">{localize('com_nav_lang_brazilian_portuguese')}</option> <option value="pl-PL">{localize('com_nav_lang_polish')}</option>
<option value="ru">{localize('com_nav_lang_russian')}</option> <option value="pt-BR">{localize('com_nav_lang_brazilian_portuguese')}</option>
<option value="jp">{localize('com_nav_lang_japanese')}</option> <option value="ru-RU">{localize('com_nav_lang_russian')}</option>
<option value="sv">{localize('com_nav_lang_swedish')}</option> <option value="ja-JP">{localize('com_nav_lang_japanese')}</option>
<option value="sv-SE">{localize('com_nav_lang_swedish')}</option>
</select> </select>
</div> </div>
); );
@ -103,6 +105,7 @@ function General() {
const clearConvosMutation = useClearConversationsMutation(); const clearConvosMutation = useClearConversationsMutation();
const [confirmClear, setConfirmClear] = useState(false); const [confirmClear, setConfirmClear] = useState(false);
const [langcode, setLangcode] = useRecoilState(store.lang); const [langcode, setLangcode] = useRecoilState(store.lang);
const [selectedLang, setSelectedLang] = useLocalStorage('selectedLang', langcode);
const { newConversation } = useConversation(); const { newConversation } = useConversation();
const { refreshConversations } = useConversations(); const { refreshConversations } = useConversations();
@ -135,9 +138,17 @@ function General() {
const changeLang = useCallback( const changeLang = useCallback(
(value: string) => { (value: string) => {
setSelectedLang(value);
if (value === 'auto') {
const userLang = navigator.language || navigator.languages[0];
setLangcode(userLang);
localStorage.setItem('lang', userLang);
} else {
setLangcode(value); setLangcode(value);
localStorage.setItem('lang', value);
}
}, },
[setLangcode], [setLangcode, setSelectedLang],
); );
return ( return (
@ -152,7 +163,7 @@ function General() {
<ThemeSelector theme={theme} onChange={changeTheme} /> <ThemeSelector theme={theme} onChange={changeTheme} />
</div> </div>
<div className="border-b pb-3 last-of-type:border-b-0 dark:border-gray-700"> <div className="border-b pb-3 last-of-type:border-b-0 dark:border-gray-700">
<LangSelector langcode={langcode} onChange={changeLang} /> <LangSelector langcode={selectedLang} onChange={changeLang} />
</div> </div>
<div className="border-b pb-3 last-of-type:border-b-0 dark:border-gray-700"> <div className="border-b pb-3 last-of-type:border-b-0 dark:border-gray-700">
<ClearChatsButton <ClearChatsButton

View file

@ -15,7 +15,7 @@ describe('LangSelector', () => {
it('renders correctly', () => { it('renders correctly', () => {
const { getByText, getByDisplayValue } = render( const { getByText, getByDisplayValue } = render(
<RecoilRoot> <RecoilRoot>
<LangSelector langcode="en" onChange={mockOnChange} /> <LangSelector langcode="en-US" onChange={mockOnChange} />
</RecoilRoot>, </RecoilRoot>,
); );
@ -26,12 +26,12 @@ describe('LangSelector', () => {
it('calls onChange when the select value changes', () => { it('calls onChange when the select value changes', () => {
const { getByDisplayValue } = render( const { getByDisplayValue } = render(
<RecoilRoot> <RecoilRoot>
<LangSelector langcode="en" onChange={mockOnChange} /> <LangSelector langcode="en-US" onChange={mockOnChange} />
</RecoilRoot>, </RecoilRoot>,
); );
fireEvent.change(getByDisplayValue('English'), { target: { value: 'it' } }); fireEvent.change(getByDisplayValue('English'), { target: { value: 'it-IT' } });
expect(mockOnChange).toHaveBeenCalledWith('it'); expect(mockOnChange).toHaveBeenCalledWith('it-IT');
}); });
}); });

View file

@ -11,6 +11,21 @@ import Japanese from './languages/Jp';
import Swedish from './languages/Sv'; import Swedish from './languages/Sv';
// === import additional language files here === // // === import additional language files here === //
const languageMap: { [key: string]: unknown } = {
'en-US': English,
'zh-CN': Chinese,
'de-DE': German,
'es-ES': Spanish,
'fr-FR': French,
'it-IT': Italian,
'pl-PL': Polish,
'pt-BR': Portuguese,
'ru-RU': Russian,
'ja-JP': Japanese,
'sv-SE': Swedish,
// Add additional language mappings here
};
// New method on String allow using "{\d}" placeholder for // New method on String allow using "{\d}" placeholder for
// loading value dynamically. // loading value dynamically.
declare global { declare global {
@ -22,7 +37,7 @@ declare global {
if (!String.prototype.format) { if (!String.prototype.format) {
String.prototype.format = function (...args: string[]) { String.prototype.format = function (...args: string[]) {
return this.replace(/{(\d+)}/g, function (match, number) { return this.replace(/{(\d+)}/g, function (match, number) {
return typeof args[number] != 'undefined' ? args[number] : match; return typeof args[number] !== 'undefined' ? args[number] : match;
}); });
}; };
} }
@ -30,57 +45,15 @@ if (!String.prototype.format) {
// input: language code in string // input: language code in string
// returns an object of translated strings in the language // returns an object of translated strings in the language
export const getTranslations = (langCode: string) => { export const getTranslations = (langCode: string) => {
if (langCode === 'en') { const language = languageMap[langCode] || English;
return English; return language;
}
if (langCode === 'cn') {
return Chinese;
}
if (langCode === 'fr') {
return French;
}
if (langCode === 'de') {
return German;
}
if (langCode === 'it') {
return Italian;
}
if (langCode === 'pl') {
return Polish;
}
if (langCode === 'br') {
return Portuguese;
}
if (langCode === 'es') {
return Spanish;
}
if (langCode === 'ru') {
return Russian;
}
if (langCode === 'jp') {
return Japanese;
}
if (langCode === 'sv') {
return Swedish;
}
// === add conditionals here for additional languages here === //
return English; // default to English
}; };
// input: language code in string & phrase key in string // input: language code in string & phrase key in string
// returns an corresponding phrase value in string // returns an corresponding phrase value in string
export const localize = (langCode: string, phraseKey: string, ...values: string[]) => { export const localize = (langCode: string, phraseKey: string, ...values: string[]) => {
const lang = getTranslations(langCode); const lang = getTranslations(langCode);
if (phraseKey in lang) { const phrase = lang[phraseKey] || English[phraseKey] || '';
return lang[phraseKey].format(...values);
}
if (phraseKey in English) { return phrase.format(...values);
// Fall back logic to cover untranslated phrases
return English[phraseKey].format(...values);
}
// In case the key is not defined, return empty instead of throw errors.
return '';
}; };

View file

@ -206,20 +206,25 @@ export default {
com_endpoint_config_key_encryption: 'Sua chave será criptografada e excluída em', com_endpoint_config_key_encryption: 'Sua chave será criptografada e excluída em',
com_endpoint_config_key_expiry: 'Tempo de expiração', com_endpoint_config_key_expiry: 'Tempo de expiração',
com_endpoint_config_key_import_json_key: 'Importar Chave JSON de Conta de Serviço.', com_endpoint_config_key_import_json_key: 'Importar Chave JSON de Conta de Serviço.',
com_endpoint_config_key_import_json_key_success: 'Chave JSON de Conta de Serviço Importada com Sucesso', com_endpoint_config_key_import_json_key_success:
com_endpoint_config_key_import_json_key_invalid: 'Chave JSON de Conta de Serviço Inválida. Você importou o arquivo correto?', 'Chave JSON de Conta de Serviço Importada com Sucesso',
com_endpoint_config_key_import_json_key_invalid:
'Chave JSON de Conta de Serviço Inválida. Você importou o arquivo correto?',
com_endpoint_config_key_get_edge_key: 'Para obter seu token de acesso para o Bing, faça login em', com_endpoint_config_key_get_edge_key: 'Para obter seu token de acesso para o Bing, faça login em',
com_endpoint_config_key_get_edge_key_dev_tool: 'Use ferramentas de desenvolvimento ou uma extensão enquanto estiver conectado ao site para copiar o conteúdo do cookie _U. Se isso falhar, siga estas', com_endpoint_config_key_get_edge_key_dev_tool:
'Use ferramentas de desenvolvimento ou uma extensão enquanto estiver conectado ao site para copiar o conteúdo do cookie _U. Se isso falhar, siga estas',
com_endpoint_config_key_edge_instructions: 'instruções', com_endpoint_config_key_edge_instructions: 'instruções',
com_endpoint_config_key_edge_full_key_string: 'para fornecer as sequências completas de cookies.', com_endpoint_config_key_edge_full_key_string: 'para fornecer as sequências completas de cookies.',
com_endpoint_config_key_chatgpt: 'Para obter seu token de acesso para o ChatGPT \'Versão Gratuita\', faça login em', com_endpoint_config_key_chatgpt:
'Para obter seu token de acesso para o ChatGPT \'Versão Gratuita\', faça login em',
com_endpoint_config_key_chatgpt_then_visit: 'depois visite', com_endpoint_config_key_chatgpt_then_visit: 'depois visite',
com_endpoint_config_key_chatgpt_copy_token: 'Copie o token de acesso.', com_endpoint_config_key_chatgpt_copy_token: 'Copie o token de acesso.',
com_endpoint_config_key_google_need_to: 'Você precisa', com_endpoint_config_key_google_need_to: 'Você precisa',
com_endpoint_config_key_google_vertex_ai: 'Ativar Vertex AI', com_endpoint_config_key_google_vertex_ai: 'Ativar Vertex AI',
com_endpoint_config_key_google_vertex_api: 'API no Google Cloud, em seguida,', com_endpoint_config_key_google_vertex_api: 'API no Google Cloud, em seguida,',
com_endpoint_config_key_google_service_account: 'Criar uma Conta de Serviço', com_endpoint_config_key_google_service_account: 'Criar uma Conta de Serviço',
com_endpoint_config_key_google_vertex_api_role: 'Certifique-se de clicar em \'Criar e Continuar\' para atribuir pelo menos a função de \'Usuário Vertex AI\'. Por fim, crie uma chave JSON para importar aqui.', com_endpoint_config_key_google_vertex_api_role:
'Certifique-se de clicar em \'Criar e Continuar\' para atribuir pelo menos a função de \'Usuário Vertex AI\'. Por fim, crie uma chave JSON para importar aqui.',
com_nav_export_filename: 'Nome do Arquivo', com_nav_export_filename: 'Nome do Arquivo',
com_nav_export_filename_placeholder: 'Defina o nome do arquivo', com_nav_export_filename_placeholder: 'Defina o nome do arquivo',
com_nav_export_type: 'Tipo', com_nav_export_type: 'Tipo',
@ -249,14 +254,5 @@ export default {
com_nav_search_placeholder: 'Procurar mensagens', com_nav_search_placeholder: 'Procurar mensagens',
com_nav_setting_general: 'Geral', com_nav_setting_general: 'Geral',
com_nav_setting_data: 'Controle de Dados', com_nav_setting_data: 'Controle de Dados',
com_nav_language: 'Idioma',
com_nav_lang_english: 'English',
com_nav_lang_chinese: '中文',
com_nav_lang_german: 'Deutsch',
com_nav_lang_spanish: 'Español',
com_nav_lang_french: 'Français ',
com_nav_lang_italian: 'Italiano',
com_nav_lang_polish: 'Polski',
com_nav_lang_brazilian_portuguese: 'Português Brasileiro', com_nav_lang_brazilian_portuguese: 'Português Brasileiro',
com_nav_lang_russian: 'Русский',
}; };

View file

@ -196,6 +196,5 @@ export default {
com_nav_settings: 'Einstellungen', com_nav_settings: 'Einstellungen',
com_nav_search_placeholder: 'Durchsuche Nachrichten', com_nav_search_placeholder: 'Durchsuche Nachrichten',
com_nav_setting_general: 'Generell', com_nav_setting_general: 'Generell',
com_nav_language: 'Sprache',
com_nav_lang_german: 'Deutsch', com_nav_lang_german: 'Deutsch',
}; };

View file

@ -255,6 +255,7 @@ export default {
com_nav_setting_general: 'General', com_nav_setting_general: 'General',
com_nav_setting_data: 'Data controls', com_nav_setting_data: 'Data controls',
com_nav_language: 'Language', com_nav_language: 'Language',
com_nav_lang_auto: 'Auto detect',
com_nav_lang_english: 'English', com_nav_lang_english: 'English',
com_nav_lang_chinese: '中文', com_nav_lang_chinese: '中文',
com_nav_lang_german: 'Deutsch', com_nav_lang_german: 'Deutsch',

View file

@ -259,14 +259,5 @@ export default {
com_nav_search_placeholder: 'Buscar mensajes', com_nav_search_placeholder: 'Buscar mensajes',
com_nav_setting_general: 'General', com_nav_setting_general: 'General',
com_nav_setting_data: 'Control de Datos', com_nav_setting_data: 'Control de Datos',
com_nav_language: 'Idioma',
com_nav_lang_english: 'English',
com_nav_lang_chinese: '中文',
com_nav_lang_german: 'Deutsch',
com_nav_lang_spanish: 'Español', com_nav_lang_spanish: 'Español',
com_nav_lang_french: 'Français ',
com_nav_lang_italian: 'Italiano',
com_nav_lang_polish: 'Polski',
com_nav_lang_brazilian_portuguese: 'Português Brasileiro',
com_nav_lang_russian: 'Русский',
}; };

View file

@ -254,5 +254,5 @@ export default {
com_nav_settings: 'Impostazioni', com_nav_settings: 'Impostazioni',
com_nav_search_placeholder: 'Cerca messaggi', com_nav_search_placeholder: 'Cerca messaggi',
com_nav_setting_general: 'Generale', com_nav_setting_general: 'Generale',
com_nav_setting_data: 'Controllo dati', com_nav_setting_data: 'Controllo dei dati',
}; };

View file

@ -12,8 +12,7 @@ export default {
com_ui_capability_decline_requests: '不適切な要求を断るように学習されています', com_ui_capability_decline_requests: '不適切な要求を断るように学習されています',
com_ui_limitations: '制限事項', com_ui_limitations: '制限事項',
com_ui_limitation_incorrect_info: '誤った情報を生成することがあります', com_ui_limitation_incorrect_info: '誤った情報を生成することがあります',
com_ui_limitation_harmful_biased: com_ui_limitation_harmful_biased: '有害な指示や偏った内容を生成する可能性があります',
'有害な指示や偏った内容を生成する可能性があります',
com_ui_limitation_limited_2021: '2021年以降の世界と出来事に関しては知識が乏しいです', com_ui_limitation_limited_2021: '2021年以降の世界と出来事に関しては知識が乏しいです',
com_ui_input: '入力', com_ui_input: '入力',
com_ui_close: '閉じる', com_ui_close: '閉じる',
@ -75,8 +74,7 @@ export default {
com_auth_password_not_match: 'パスワードが一致しません', com_auth_password_not_match: 'パスワードが一致しません',
com_auth_continue: '続ける', com_auth_continue: '続ける',
com_auth_create_account: 'アカウント登録', com_auth_create_account: 'アカウント登録',
com_auth_error_create: com_auth_error_create: 'アカウント登録に失敗しました。もう一度試してください。',
'アカウント登録に失敗しました。もう一度試してください。',
com_auth_full_name: '姓名', com_auth_full_name: '姓名',
com_auth_name_required: '姓名は必須です', com_auth_name_required: '姓名は必須です',
com_auth_name_min_length: '姓名は最低3文字は必要です', com_auth_name_min_length: '姓名は最低3文字は必要です',
@ -92,8 +90,7 @@ export default {
com_auth_here: 'こちら', com_auth_here: 'こちら',
com_auth_to_reset_your_password: 'to reset your password.', com_auth_to_reset_your_password: 'to reset your password.',
com_auth_reset_password_link_sent: 'メールを送信する', com_auth_reset_password_link_sent: 'メールを送信する',
com_auth_reset_password_email_sent: com_auth_reset_password_email_sent: 'パスワードリセット方法を記載したメールを送信しました。',
'パスワードリセット方法を記載したメールを送信しました。',
com_auth_error_reset_password: com_auth_error_reset_password:
'パスワードリセット中に問題が発生しました。指定されたメールアドレスのユーザは存在しません。別のメールアドレスでもう一度お試しください。', 'パスワードリセット中に問題が発生しました。指定されたメールアドレスのユーザは存在しません。別のメールアドレスでもう一度お試しください。',
com_auth_reset_password_success: 'パスワードリセットに成功しました', com_auth_reset_password_success: 'パスワードリセットに成功しました',
@ -130,7 +127,8 @@ export default {
com_endpoint_google_maxoutputtokens: com_endpoint_google_maxoutputtokens:
' 生成されるレスポンスの最大トークン数。短いレスポンスには低い値を、長いレスポンスには高い値を指定する。', ' 生成されるレスポンスの最大トークン数。短いレスポンスには低い値を、長いレスポンスには高い値を指定する。',
com_endpoint_google_custom_name_placeholder: 'PaLM2用の名前を設定する', com_endpoint_google_custom_name_placeholder: 'PaLM2用の名前を設定する',
com_endpoint_prompt_prefix_placeholder: 'custom instructions か context を設定する。空の場合は無視されます。', com_endpoint_prompt_prefix_placeholder:
'custom instructions か context を設定する。空の場合は無視されます。',
com_endpoint_custom_name: 'プリセット名', com_endpoint_custom_name: 'プリセット名',
com_endpoint_prompt_prefix: 'プロンプトの先頭', com_endpoint_prompt_prefix: 'プロンプトの先頭',
com_endpoint_temperature: 'Temperature', com_endpoint_temperature: 'Temperature',
@ -205,15 +203,18 @@ export default {
com_endpoint_config_key_encryption: '鍵は暗号化されます。削除予定日:', com_endpoint_config_key_encryption: '鍵は暗号化されます。削除予定日:',
com_endpoint_config_key_expiry: 'すでに有効期限切れ', com_endpoint_config_key_expiry: 'すでに有効期限切れ',
com_endpoint_config_key_import_json_key: 'Service Account JSON Key をインポートする。', com_endpoint_config_key_import_json_key: 'Service Account JSON Key をインポートする。',
com_endpoint_config_key_import_json_key_success: 'Service Account JSON Keyのインポートに成功しました。', com_endpoint_config_key_import_json_key_success:
'Service Account JSON Keyのインポートに成功しました。',
com_endpoint_config_key_import_json_key_invalid: com_endpoint_config_key_import_json_key_invalid:
'無効なService Account JSON Keyです。正しいファイルか確認してください。', '無効なService Account JSON Keyです。正しいファイルか確認してください。',
com_endpoint_config_key_get_edge_key: 'Bing用のアクセストークンを取得するためにログインをしてください: ', com_endpoint_config_key_get_edge_key:
'Bing用のアクセストークンを取得するためにログインをしてください: ',
com_endpoint_config_key_get_edge_key_dev_tool: com_endpoint_config_key_get_edge_key_dev_tool:
'サイトにログインした状態で、開発ツールまたは拡張機能を使用して、_U クッキーの内容をコピーします。もし失敗する場合は次の手順に従ってください。', 'サイトにログインした状態で、開発ツールまたは拡張機能を使用して、_U クッキーの内容をコピーします。もし失敗する場合は次の手順に従ってください。',
com_endpoint_config_key_edge_instructions: '手順', com_endpoint_config_key_edge_instructions: '手順',
com_endpoint_config_key_edge_full_key_string: 'to provide the full cookie strings.', com_endpoint_config_key_edge_full_key_string: 'to provide the full cookie strings.',
com_endpoint_config_key_chatgpt: 'ChatGPTの「Free Version」のアクセストークンを入手するためにへログインをしてください:', com_endpoint_config_key_chatgpt:
'ChatGPTの「Free Version」のアクセストークンを入手するためにへログインをしてください:',
com_endpoint_config_key_chatgpt_then_visit: 'つぎに、ここへアクセスしてください:', com_endpoint_config_key_chatgpt_then_visit: 'つぎに、ここへアクセスしてください:',
com_endpoint_config_key_chatgpt_copy_token: 'トークンをコピーしてください。', com_endpoint_config_key_chatgpt_copy_token: 'トークンをコピーしてください。',
com_endpoint_config_key_google_need_to: 'こちらを有効化する必要があります:', com_endpoint_config_key_google_need_to: 'こちらを有効化する必要があります:',
@ -250,5 +251,4 @@ export default {
com_nav_search_placeholder: 'メッセージ検索', com_nav_search_placeholder: 'メッセージ検索',
com_nav_setting_general: '一般', com_nav_setting_general: '一般',
com_nav_setting_data: 'データ管理', com_nav_setting_data: 'データ管理',
com_nav_language: '言語'
}; };

View file

@ -1,3 +1,5 @@
// Swedish phrases
export default { export default {
com_ui_examples: 'Exempel', // Examples com_ui_examples: 'Exempel', // Examples
com_ui_new_chat: 'Ny chatt', // New chat com_ui_new_chat: 'Ny chatt', // New chat
@ -10,7 +12,8 @@ export default {
com_ui_capability_decline_requests: 'Tränad för att avvisa olämpliga förfrågningar', // Trained to decline inappropriate requests com_ui_capability_decline_requests: 'Tränad för att avvisa olämpliga förfrågningar', // Trained to decline inappropriate requests
com_ui_limitations: 'Begränsningar', // Limitations com_ui_limitations: 'Begränsningar', // Limitations
com_ui_limitation_incorrect_info: 'Kan ibland generera felaktig information', // May occasionally generate incorrect information com_ui_limitation_incorrect_info: 'Kan ibland generera felaktig information', // May occasionally generate incorrect information
com_ui_limitation_harmful_biased: 'Kan ibland producera skadliga instruktioner eller snedvridet innehåll', // May occasionally produce harmful instructions or biased content com_ui_limitation_harmful_biased:
'Kan ibland producera skadliga instruktioner eller snedvridet innehåll', // May occasionally produce harmful instructions or biased content
com_ui_limitation_limited_2021: 'Begränsad kunskap om världen och händelser efter 2021', // Limited knowledge of world and events after 2021 com_ui_limitation_limited_2021: 'Begränsad kunskap om världen och händelser efter 2021', // Limited knowledge of world and events after 2021
com_ui_input: 'Inmatning', // Input com_ui_input: 'Inmatning', // Input
com_ui_close: 'Stäng', // Close com_ui_close: 'Stäng', // Close
@ -46,8 +49,10 @@ export default {
com_ui_delete: 'Radera', // Delete com_ui_delete: 'Radera', // Delete
com_ui_delete_conversation: 'Radera chatt?', // Delete chat? com_ui_delete_conversation: 'Radera chatt?', // Delete chat?
com_ui_delete_conversation_confirm: 'Detta kommer att radera', // This will delete com_ui_delete_conversation_confirm: 'Detta kommer att radera', // This will delete
com_auth_error_login: 'Kunde inte logga in med den angivna informationen. Kontrollera dina uppgifter och försök igen.', // Unable to login with the information provided. Please check your credentials and try again. com_auth_error_login:
com_auth_error_login_rl: 'För många inloggningsförsök från den här IP-adressen på kort tid. Vänligen försök igen senare.', // Too many login attempts from this IP in a short amount of time. Please try again later. 'Kunde inte logga in med den angivna informationen. Kontrollera dina uppgifter och försök igen.', // Unable to login with the information provided. Please check your credentials and try again.
com_auth_error_login_rl:
'För många inloggningsförsök från den här IP-adressen på kort tid. Vänligen försök igen senare.', // Too many login attempts from this IP in a short amount of time. Please try again later.
com_auth_no_account: 'Har du inget konto?', // Don't have an account? com_auth_no_account: 'Har du inget konto?', // Don't have an account?
com_auth_sign_up: 'Registrera dig', // Sign up com_auth_sign_up: 'Registrera dig', // Sign up
com_auth_sign_in: 'Logga in', // Sign in com_auth_sign_in: 'Logga in', // Sign in
@ -70,7 +75,8 @@ export default {
com_auth_password_not_match: 'Lösenorden matchar inte', // Passwords do not match com_auth_password_not_match: 'Lösenorden matchar inte', // Passwords do not match
com_auth_continue: 'Fortsätt', // Continue com_auth_continue: 'Fortsätt', // Continue
com_auth_create_account: 'Skapa ditt konto', // Create your account com_auth_create_account: 'Skapa ditt konto', // Create your account
com_auth_error_create: 'Det uppstod ett fel när du försökte registrera ditt konto. Vänligen försök igen.', // There was an error attempting to register your account. Please try again. com_auth_error_create:
'Det uppstod ett fel när du försökte registrera ditt konto. Vänligen försök igen.', // There was an error attempting to register your account. Please try again.
com_auth_full_name: 'Fullständigt namn', // Full name com_auth_full_name: 'Fullständigt namn', // Full name
com_auth_name_required: 'Namn krävs', // Name is required com_auth_name_required: 'Namn krävs', // Name is required
com_auth_name_min_length: 'Namnet måste vara minst 3 tecken', // Name must be at least 3 characters com_auth_name_min_length: 'Namnet måste vara minst 3 tecken', // Name must be at least 3 characters
@ -86,8 +92,10 @@ export default {
com_auth_here: 'HÄR', // HERE com_auth_here: 'HÄR', // HERE
com_auth_to_reset_your_password: 'för att återställa ditt lösenord.', // to reset your password. com_auth_to_reset_your_password: 'för att återställa ditt lösenord.', // to reset your password.
com_auth_reset_password_link_sent: 'E-post skickad', // Email Sent com_auth_reset_password_link_sent: 'E-post skickad', // Email Sent
com_auth_reset_password_email_sent: 'Ett e-postmeddelande har skickats till dig med ytterligare instruktioner för att återställa ditt lösenord.', // An email has been sent to you with further instructions to reset your password. com_auth_reset_password_email_sent:
com_auth_error_reset_password: 'Det uppstod ett problem med att återställa ditt lösenord. Ingen användare hittades med den angivna e-postadressen. Vänligen försök igen.', // There was a problem resetting your password. There was no user found with the email address provided. Please try again. 'Ett e-postmeddelande har skickats till dig med ytterligare instruktioner för att återställa ditt lösenord.', // An email has been sent to you with further instructions to reset your password.
com_auth_error_reset_password:
'Det uppstod ett problem med att återställa ditt lösenord. Ingen användare hittades med den angivna e-postadressen. Vänligen försök igen.', // There was a problem resetting your password. There was no user found with the email address provided. Please try again.
com_auth_reset_password_success: 'Lösenordsåterställning lyckades', // Password Reset Success com_auth_reset_password_success: 'Lösenordsåterställning lyckades', // Password Reset Success
com_auth_login_with_new_password: 'Du kan nu logga in med ditt nya lösenord.', // You may now login with your new password. com_auth_login_with_new_password: 'Du kan nu logga in med ditt nya lösenord.', // You may now login with your new password.
com_auth_error_invalid_reset_token: 'Detta lösenordsåterställningsnyckel är inte längre giltigt.', // This password reset token is no longer valid. com_auth_error_invalid_reset_token: 'Detta lösenordsåterställningsnyckel är inte längre giltigt.', // This password reset token is no longer valid.
@ -99,8 +107,10 @@ export default {
com_endpoint_bing_enable_sydney: 'Aktivera Sydney', // Enable Sydney com_endpoint_bing_enable_sydney: 'Aktivera Sydney', // Enable Sydney
com_endpoint_bing_to_enable_sydney: 'För att aktivera Sydney', // To enable Sydney com_endpoint_bing_to_enable_sydney: 'För att aktivera Sydney', // To enable Sydney
com_endpoint_bing_jailbreak: 'Jailbreak', // Jailbreak com_endpoint_bing_jailbreak: 'Jailbreak', // Jailbreak
com_endpoint_bing_context_placeholder: 'Bing kan använda upp till 7k tokens för "kontext", som den kan referera till under konversationen. Den specifika gränsen är inte känd men kan stöta på fel om den överstiger 7k tokens', // Bing can use up to 7k tokens for 'context', which it can reference for the conversation. The specific limit is not known but may run into errors exceeding 7k tokens com_endpoint_bing_context_placeholder:
com_endpoint_bing_system_message_placeholder: 'VARNING: Otillåten användning av denna funktion kan få dig BANNAD från att använda Bing! Klicka på "Systemmeddelande" för fullständiga instruktioner och standardmeddelandet om det utelämnas, vilket är "Sydney"-förinställningen som anses vara säker.', // WARNING: Misuse of this feature can get you BANNED from using Bing! Click on 'System Message' for full instructions and the default message if omitted, which is the 'Sydney' preset that is considered safe. 'Bing kan använda upp till 7k tokens för "kontext", som den kan referera till under konversationen. Den specifika gränsen är inte känd men kan stöta på fel om den överstiger 7k tokens', // Bing can use up to 7k tokens for 'context', which it can reference for the conversation. The specific limit is not known but may run into errors exceeding 7k tokens
com_endpoint_bing_system_message_placeholder:
'VARNING: Otillåten användning av denna funktion kan få dig BANNAD från att använda Bing! Klicka på "Systemmeddelande" för fullständiga instruktioner och standardmeddelandet om det utelämnas, vilket är "Sydney"-förinställningen som anses vara säker.', // WARNING: Misuse of this feature can get you BANNED from using Bing! Click on 'System Message' for full instructions and the default message if omitted, which is the 'Sydney' preset that is considered safe.
com_endpoint_system_message: 'Systemmeddelande', // System Message com_endpoint_system_message: 'Systemmeddelande', // System Message
com_endpoint_default_blank: 'standard: tom', // default: blank com_endpoint_default_blank: 'standard: tom', // default: blank
com_endpoint_default_false: 'standard: falsk', // default: false com_endpoint_default_false: 'standard: falsk', // default: false
@ -111,12 +121,17 @@ export default {
com_endpoint_tone_style: 'Tonstil', // Tone Style com_endpoint_tone_style: 'Tonstil', // Tone Style
com_endpoint_token_count: 'Antal tokens', // Token count com_endpoint_token_count: 'Antal tokens', // Token count
com_endpoint_output: 'Utdata', // Output com_endpoint_output: 'Utdata', // Output
com_endpoint_google_temp: 'Högre värden = mer slumpmässigt, medan lägre värden = mer fokuserat och bestämt. Vi rekommenderar att ändra detta eller Top P men inte båda.', // Higher values = more random, while lower values = more focused and deterministic. We recommend altering this or Top P but not both. com_endpoint_google_temp:
com_endpoint_google_topp: 'Top-p ändrar hur modellen väljer tokens för utdata. Tokens väljs från de mest K (se topK-parameter) sannolika till de minst tills summan av deras sannolikheter når top-p-värdet.', // Top-p changes how the model selects tokens for output. Tokens are selected from most K (see topK parameter) probable to least until the sum of their probabilities equals the top-p value. 'Högre värden = mer slumpmässigt, medan lägre värden = mer fokuserat och bestämt. Vi rekommenderar att ändra detta eller Top P men inte båda.', // Higher values = more random, while lower values = more focused and deterministic. We recommend altering this or Top P but not both.
com_endpoint_google_topk: 'Top-k ändrar hur modellen väljer tokens för utdata. Ett top-k av 1 innebär att den valda token är den mest sannolika bland alla tokens i modellens vokabulär (kallas också girig avkodning), medan ett top-k av 3 innebär att nästa token väljs bland de 3 mest sannolika tokens (med temperatur).', // Top-k changes how the model selects tokens for output. A top-k of 1 means the selected token is the most probable among all tokens in the model's vocabulary (also called greedy decoding), while a top-k of 3 means that the next token is selected from among the 3 most probable tokens (using temperature). com_endpoint_google_topp:
com_endpoint_google_maxoutputtokens: 'Maximalt antal tokens som kan genereras i svaret. Ange ett lägre värde för kortare svar och ett högre värde för längre svar.', // Maximum number of tokens that can be generated in the response. Specify a lower value for shorter responses and a higher value for longer responses. 'Top-p ändrar hur modellen väljer tokens för utdata. Tokens väljs från de mest K (se topK-parameter) sannolika till de minst tills summan av deras sannolikheter når top-p-värdet.', // Top-p changes how the model selects tokens for output. Tokens are selected from most K (see topK parameter) probable to least until the sum of their probabilities equals the top-p value.
com_endpoint_google_topk:
'Top-k ändrar hur modellen väljer tokens för utdata. Ett top-k av 1 innebär att den valda token är den mest sannolika bland alla tokens i modellens vokabulär (kallas också girig avkodning), medan ett top-k av 3 innebär att nästa token väljs bland de 3 mest sannolika tokens (med temperatur).', // Top-k changes how the model selects tokens for output. A top-k of 1 means the selected token is the most probable among all tokens in the model's vocabulary (also called greedy decoding), while a top-k of 3 means that the next token is selected from among the 3 most probable tokens (using temperature).
com_endpoint_google_maxoutputtokens:
'Maximalt antal tokens som kan genereras i svaret. Ange ett lägre värde för kortare svar och ett högre värde för längre svar.', // Maximum number of tokens that can be generated in the response. Specify a lower value for shorter responses and a higher value for longer responses.
com_endpoint_google_custom_name_placeholder: 'Ange ett anpassat namn för PaLM2', // Set a custom name for PaLM2 com_endpoint_google_custom_name_placeholder: 'Ange ett anpassat namn för PaLM2', // Set a custom name for PaLM2
com_endpoint_prompt_prefix_placeholder: 'Ange anpassade instruktioner eller kontext. Ignoreras om tom.', // Set custom instructions or context. Ignored if empty. com_endpoint_prompt_prefix_placeholder:
'Ange anpassade instruktioner eller kontext. Ignoreras om tom.', // Set custom instructions or context. Ignored if empty.
com_endpoint_custom_name: 'Anpassat namn', // Custom Name com_endpoint_custom_name: 'Anpassat namn', // Custom Name
com_endpoint_prompt_prefix: 'Uppmaningsprefix', // Prompt Prefix com_endpoint_prompt_prefix: 'Uppmaningsprefix', // Prompt Prefix
com_endpoint_temperature: 'Temperatur', // Temperature com_endpoint_temperature: 'Temperatur', // Temperature
@ -124,17 +139,27 @@ export default {
com_endpoint_top_p: 'Top P', // Top P com_endpoint_top_p: 'Top P', // Top P
com_endpoint_top_k: 'Top K', // Top K com_endpoint_top_k: 'Top K', // Top K
com_endpoint_max_output_tokens: 'Max utdatatokens', // Max Output Tokens com_endpoint_max_output_tokens: 'Max utdatatokens', // Max Output Tokens
com_endpoint_openai_temp: 'Högre värden = mer slumpmässigt, medan lägre värden = mer fokuserat och bestämt. Vi rekommenderar att ändra detta eller Top P men inte båda.', // Higher values = more random, while lower values = more focused and deterministic. We recommend altering this or Top P but not both. com_endpoint_openai_temp:
com_endpoint_openai_max: 'Max tokens att generera. Den totala längden på tokens för inmatning och svar är begränsad av modellen som används.', // The max tokens to generate. The total length of input tokens and generated tokens is limited by the model's context length. 'Högre värden = mer slumpmässigt, medan lägre värden = mer fokuserat och bestämt. Vi rekommenderar att ändra detta eller Top P men inte båda.', // Higher values = more random, while lower values = more focused and deterministic. We recommend altering this or Top P but not both.
com_endpoint_openai_topp: 'Ett alternativ till temperatur, kallat kärnprovtagning, där modellen beaktar resultaten av tokens med top_p-sannolikhetsmassa. Så 0,1 innebär att endast de tokens som utgör den översta 10% sannolikhetsmassan beaktas. Vi rekommenderar att ändra detta eller temperaturen men inte båda.', // An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We recommend altering this or temperature but not both. com_endpoint_openai_max:
com_endpoint_openai_freq: 'Nummer mellan -2,0 och 2,0. Positiva värden minskar nya tokens baserat på deras befintliga frekvens i texten hittills, vilket minskar modellens sannolikhet att upprepa samma rad ordagrant.', // Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. 'Max tokens att generera. Den totala längden på tokens för inmatning och svar är begränsad av modellen som används.', // The max tokens to generate. The total length of input tokens and generated tokens is limited by the model's context length.
com_endpoint_openai_pres: 'Nummer mellan -2,0 och 2,0. Positiva värden minskar nya tokens baserat på om de förekommer i texten hittills, vilket ökar modellens sannolikhet att prata om nya ämnen.', // Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics. com_endpoint_openai_topp:
'Ett alternativ till temperatur, kallat kärnprovtagning, där modellen beaktar resultaten av tokens med top_p-sannolikhetsmassa. Så 0,1 innebär att endast de tokens som utgör den översta 10% sannolikhetsmassan beaktas. Vi rekommenderar att ändra detta eller temperaturen men inte båda.', // An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We recommend altering this or temperature but not both.
com_endpoint_openai_freq:
'Nummer mellan -2,0 och 2,0. Positiva värden minskar nya tokens baserat på deras befintliga frekvens i texten hittills, vilket minskar modellens sannolikhet att upprepa samma rad ordagrant.', // Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.
com_endpoint_openai_pres:
'Nummer mellan -2,0 och 2,0. Positiva värden minskar nya tokens baserat på om de förekommer i texten hittills, vilket ökar modellens sannolikhet att prata om nya ämnen.', // Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.
com_endpoint_openai_custom_name_placeholder: 'Ange ett eget namn för ChatGPT', // Set a custom name for ChatGPT com_endpoint_openai_custom_name_placeholder: 'Ange ett eget namn för ChatGPT', // Set a custom name for ChatGPT
com_endpoint_openai_prompt_prefix_placeholder: 'Ange anpassade instruktioner att inkludera i Systemmeddelande. Standard: inga', // Set custom instructions to include in System Message. Default: none com_endpoint_openai_prompt_prefix_placeholder:
com_endpoint_anthropic_temp: 'Varierar mellan 0 och 1. Använd temp närmare 0 för analytiska/flervalsfrågor och närmare 1 för kreativa och generativa uppgifter. Vi rekommenderar att ändra detta eller Top P men inte båda.', // Ranges from 0 to 1. Use temp closer to 0 for analytical / multiple choice, and closer to 1 for creative and generative tasks. We recommend altering this or Top P but not both. 'Ange anpassade instruktioner att inkludera i Systemmeddelande. Standard: inga', // Set custom instructions to include in System Message. Default: none
com_endpoint_anthropic_topp: 'Top-p ändrar hur modellen väljer tokens för utdata. Tokens väljs från de mest K (se topK-parameter) sannolika till de minst tills summan av deras sannolikheter når top-p-värdet.', // Top-p changes how the model selects tokens for output. Tokens are selected from most K (see topK parameter) probable to least until the sum of their probabilities equals the top-p value. com_endpoint_anthropic_temp:
com_endpoint_anthropic_topk: 'Top-k ändrar hur modellen väljer tokens för utdata. Ett top-k av 1 innebär att den valda token är den mest sannolika bland alla tokens i modellens vokabulär (kallas också girig avkodning), medan ett top-k av 3 innebär att nästa token väljs bland de 3 mest sannolika tokens (med temperatur).', // Top-k changes how the model selects tokens for output. A top-k of 1 means the selected token is the most probable among all tokens in the model's vocabulary (also called greedy decoding), while a top-k of 3 means that the next token is selected from among the 3 most probable tokens (using temperature). 'Varierar mellan 0 och 1. Använd temp närmare 0 för analytiska/flervalsfrågor och närmare 1 för kreativa och generativa uppgifter. Vi rekommenderar att ändra detta eller Top P men inte båda.', // Ranges from 0 to 1. Use temp closer to 0 for analytical / multiple choice, and closer to 1 for creative and generative tasks. We recommend altering this or Top P but not both.
com_endpoint_anthropic_maxoutputtokens: 'Maximalt antal tokens som kan genereras i svaret. Ange ett lägre värde för kortare svar och ett högre värde för längre svar.', // Maximum number of tokens that can be generated in the response. Specify a lower value for shorter responses and a higher value for longer responses. com_endpoint_anthropic_topp:
'Top-p ändrar hur modellen väljer tokens för utdata. Tokens väljs från de mest K (se topK-parameter) sannolika till de minst tills summan av deras sannolikheter når top-p-värdet.', // Top-p changes how the model selects tokens for output. Tokens are selected from most K (see topK parameter) probable to least until the sum of their probabilities equals the top-p value.
com_endpoint_anthropic_topk:
'Top-k ändrar hur modellen väljer tokens för utdata. Ett top-k av 1 innebär att den valda token är den mest sannolika bland alla tokens i modellens vokabulär (kallas också girig avkodning), medan ett top-k av 3 innebär att nästa token väljs bland de 3 mest sannolika tokens (med temperatur).', // Top-k changes how the model selects tokens for output. A top-k of 1 means the selected token is the most probable among all tokens in the model's vocabulary (also called greedy decoding), while a top-k of 3 means that the next token is selected from among the 3 most probable tokens (using temperature).
com_endpoint_anthropic_maxoutputtokens:
'Maximalt antal tokens som kan genereras i svaret. Ange ett lägre värde för kortare svar och ett högre värde för längre svar.', // Maximum number of tokens that can be generated in the response. Specify a lower value for shorter responses and a higher value for longer responses.
com_endpoint_anthropic_custom_name_placeholder: 'Ange ett anpassat namn för Anthropic', // Set a custom name for Anthropic com_endpoint_anthropic_custom_name_placeholder: 'Ange ett anpassat namn för Anthropic', // Set a custom name for Anthropic
com_endpoint_frequency_penalty: 'Frekvensstraff', // Frequency Penalty com_endpoint_frequency_penalty: 'Frekvensstraff', // Frequency Penalty
com_endpoint_presence_penalty: 'Närvarostraff', // Presence Penalty com_endpoint_presence_penalty: 'Närvarostraff', // Presence Penalty
@ -142,7 +167,8 @@ export default {
com_endpoint_plug_skip_completion: 'Hoppa över komplettering', // Skip Completion com_endpoint_plug_skip_completion: 'Hoppa över komplettering', // Skip Completion
com_endpoint_disabled_with_tools: 'inaktiverad med verktyg', // disabled with tools com_endpoint_disabled_with_tools: 'inaktiverad med verktyg', // disabled with tools
com_endpoint_disabled_with_tools_placeholder: 'Inaktiverad med valda verktyg', // Disabled with Tools Selected com_endpoint_disabled_with_tools_placeholder: 'Inaktiverad med valda verktyg', // Disabled with Tools Selected
com_endpoint_plug_set_custom_instructions_for_gpt_placeholder: 'Ange anpassade instruktioner att inkludera i systemmeddelande. Standard: inga', // Set custom instructions to include in System Message. Default: none com_endpoint_plug_set_custom_instructions_for_gpt_placeholder:
'Ange anpassade instruktioner att inkludera i systemmeddelande. Standard: inga', // Set custom instructions to include in System Message. Default: none
com_endpoint_import: 'Importera', // Import com_endpoint_import: 'Importera', // Import
com_endpoint_set_custom_name: 'Ange ett eget namn, om du kan hitta denna förinställning', // Set a custom name, in case you can find this preset com_endpoint_set_custom_name: 'Ange ett eget namn, om du kan hitta denna förinställning', // Set a custom name, in case you can find this preset
com_endpoint_preset: 'förinställning', // preset com_endpoint_preset: 'förinställning', // preset
@ -159,7 +185,8 @@ export default {
com_endpoint_save: 'Spara', // Save com_endpoint_save: 'Spara', // Save
com_endpoint_export: 'Exportera', // Export com_endpoint_export: 'Exportera', // Export
com_endpoint_save_as_preset: 'Spara som förinställning', // Save As Preset com_endpoint_save_as_preset: 'Spara som förinställning', // Save As Preset
com_endpoint_presets_clear_warning: 'Är du säker på att du vill rensa alla förinställningar? Detta går inte att ångra.', // Are you sure you want to clear all presets? This is irreversible. com_endpoint_presets_clear_warning:
'Är du säker på att du vill rensa alla förinställningar? Detta går inte att ångra.', // Are you sure you want to clear all presets? This is irreversible.
com_endpoint_not_implemented: 'Ej implementerad', // Not implemented com_endpoint_not_implemented: 'Ej implementerad', // Not implemented
com_endpoint_no_presets: 'Ingen förinställning ännu', // No preset yet com_endpoint_no_presets: 'Ingen förinställning ännu', // No preset yet
com_endpoint_not_available: 'Ingen slutpunkt tillgänglig', // No endpoint available com_endpoint_not_available: 'Ingen slutpunkt tillgänglig', // No endpoint available
@ -169,7 +196,8 @@ export default {
com_endpoint_agent_model: 'Agentmodell (Rekommenderad: GPT-3.5)', // Agent Model (Recommended: GPT-3.5) com_endpoint_agent_model: 'Agentmodell (Rekommenderad: GPT-3.5)', // Agent Model (Recommended: GPT-3.5)
com_endpoint_completion_model: 'Kompletteringsmodell (Rekommenderad: GPT-4)', // Completion Model (Recommended: GPT-4) com_endpoint_completion_model: 'Kompletteringsmodell (Rekommenderad: GPT-4)', // Completion Model (Recommended: GPT-4)
com_endpoint_func_hover: 'Aktivera användning av tillägg som OpenAI-funktioner', // Enable use of Plugins as OpenAI Functions com_endpoint_func_hover: 'Aktivera användning av tillägg som OpenAI-funktioner', // Enable use of Plugins as OpenAI Functions
com_endpoint_skip_hover: 'Aktivera att hoppa över kompletteringssteg, som granskar det slutliga svaret och genererade steg', // Enable skipping the completion step, which reviews the final answer and generated steps com_endpoint_skip_hover:
'Aktivera att hoppa över kompletteringssteg, som granskar det slutliga svaret och genererade steg', // Enable skipping the completion step, which reviews the final answer and generated steps
com_endpoint_config_key: 'Ange API-nyckel', // Set API Key com_endpoint_config_key: 'Ange API-nyckel', // Set API Key
com_endpoint_config_key_for: 'Ange API-nyckel för', // Set API Key for com_endpoint_config_key_for: 'Ange API-nyckel för', // Set API Key for
com_endpoint_config_key_name: 'Nyckel', // Key com_endpoint_config_key_name: 'Nyckel', // Key
@ -179,13 +207,15 @@ export default {
com_endpoint_config_key_expiry: 'utgångstiden', // the expiry time com_endpoint_config_key_expiry: 'utgångstiden', // the expiry time
com_endpoint_config_key_import_json_key: 'Importera JSON-nyckel för kontot.', // Import Service Account JSON Key. com_endpoint_config_key_import_json_key: 'Importera JSON-nyckel för kontot.', // Import Service Account JSON Key.
com_endpoint_config_key_import_json_key_success: 'Lyckades importera JSON-nyckel för kontot', // Successfully Imported Service Account JSON Key com_endpoint_config_key_import_json_key_success: 'Lyckades importera JSON-nyckel för kontot', // Successfully Imported Service Account JSON Key
com_endpoint_config_key_import_json_key_invalid: 'Ogiltig JSON-nyckel för konto, importerade du rätt fil?', // Invalid Service Account JSON Key, Did you import the correct file? com_endpoint_config_key_import_json_key_invalid:
'Ogiltig JSON-nyckel för konto, importerade du rätt fil?', // Invalid Service Account JSON Key, Did you import the correct file?
com_endpoint_config_key_get_edge_key: 'För att få din åtkomstnyckel för Bing, logga in på', // To get your Access token for Bing, login to com_endpoint_config_key_get_edge_key: 'För att få din åtkomstnyckel för Bing, logga in på', // To get your Access token for Bing, login to
com_endpoint_config_key_get_edge_key_dev_tool: com_endpoint_config_key_get_edge_key_dev_tool:
'Använd utvecklingsverktyg eller ett tillägg när du är inloggad på webbplatsen för att kopiera innehållet i _U-cookien. Om detta misslyckas, följ dessa', // Use dev tools or an extension while logged into the site to copy the content of the _U cookie. If this fails, follow these 'Använd utvecklingsverktyg eller ett tillägg när du är inloggad på webbplatsen för att kopiera innehållet i _U-cookien. Om detta misslyckas, följ dessa', // Use dev tools or an extension while logged into the site to copy the content of the _U cookie. If this fails, follow these
com_endpoint_config_key_edge_instructions: 'instruktioner', // instructions com_endpoint_config_key_edge_instructions: 'instruktioner', // instructions
com_endpoint_config_key_edge_full_key_string: 'för att tillhandahålla hela cookie-strängarna.', // to provide the full cookie strings. com_endpoint_config_key_edge_full_key_string: 'för att tillhandahålla hela cookie-strängarna.', // to provide the full cookie strings.
com_endpoint_config_key_chatgpt: 'För att få din åtkomstnyckel för ChatGPT "Gratisversion", logga in på', // To get your Access token For ChatGPT 'Free Version', login to com_endpoint_config_key_chatgpt:
'För att få din åtkomstnyckel för ChatGPT "Gratisversion", logga in på', // To get your Access token For ChatGPT 'Free Version', login to
com_endpoint_config_key_chatgpt_then_visit: 'sedan besök', // then visit com_endpoint_config_key_chatgpt_then_visit: 'sedan besök', // then visit
com_endpoint_config_key_chatgpt_copy_token: 'Kopiera åtkomstnyckel.', // Copy access token. com_endpoint_config_key_chatgpt_copy_token: 'Kopiera åtkomstnyckel.', // Copy access token.
com_endpoint_config_key_google_need_to: 'Du behöver', // You need to com_endpoint_config_key_google_need_to: 'Du behöver', // You need to
@ -222,4 +252,4 @@ export default {
com_nav_search_placeholder: 'Sök meddelanden', // Search messages com_nav_search_placeholder: 'Sök meddelanden', // Search messages
com_nav_setting_general: 'Allmänt', // General com_nav_setting_general: 'Allmänt', // General
com_nav_setting_data: 'Datakontroller', // Data controls com_nav_setting_data: 'Datakontroller', // Data controls
} };

View file

@ -2,7 +2,7 @@ import { atom } from 'recoil';
const lang = atom({ const lang = atom({
key: 'lang', key: 'lang',
default: 'en', default: localStorage.getItem('lang') || 'en',
}); });
export default { lang }; export default { lang };