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

View file

@ -15,7 +15,7 @@ describe('LangSelector', () => {
it('renders correctly', () => {
const { getByText, getByDisplayValue } = render(
<RecoilRoot>
<LangSelector langcode="en" onChange={mockOnChange} />
<LangSelector langcode="en-US" onChange={mockOnChange} />
</RecoilRoot>,
);
@ -26,12 +26,12 @@ describe('LangSelector', () => {
it('calls onChange when the select value changes', () => {
const { getByDisplayValue } = render(
<RecoilRoot>
<LangSelector langcode="en" onChange={mockOnChange} />
<LangSelector langcode="en-US" onChange={mockOnChange} />
</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 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
// loading value dynamically.
declare global {
@ -22,7 +37,7 @@ declare global {
if (!String.prototype.format) {
String.prototype.format = function (...args: string[]) {
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
// returns an object of translated strings in the language
export const getTranslations = (langCode: string) => {
if (langCode === 'en') {
return English;
}
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
const language = languageMap[langCode] || English;
return language;
};
// input: language code in string & phrase key in string
// returns an corresponding phrase value in string
export const localize = (langCode: string, phraseKey: string, ...values: string[]) => {
const lang = getTranslations(langCode);
if (phraseKey in lang) {
return lang[phraseKey].format(...values);
}
const phrase = lang[phraseKey] || English[phraseKey] || '';
if (phraseKey in English) {
// 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 '';
return phrase.format(...values);
};

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_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_success: '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_import_json_key_success:
'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_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_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_copy_token: 'Copie o token de acesso.',
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_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_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_placeholder: 'Defina o nome do arquivo',
com_nav_export_type: 'Tipo',
@ -249,14 +254,5 @@ export default {
com_nav_search_placeholder: 'Procurar mensagens',
com_nav_setting_general: 'Geral',
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_russian: 'Русский',
};

View file

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

View file

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

View file

@ -259,14 +259,5 @@ export default {
com_nav_search_placeholder: 'Buscar mensajes',
com_nav_setting_general: 'General',
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_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_search_placeholder: 'Cerca messaggi',
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_limitations: '制限事項',
com_ui_limitation_incorrect_info: '誤った情報を生成することがあります',
com_ui_limitation_harmful_biased:
'有害な指示や偏った内容を生成する可能性があります',
com_ui_limitation_harmful_biased: '有害な指示や偏った内容を生成する可能性があります',
com_ui_limitation_limited_2021: '2021年以降の世界と出来事に関しては知識が乏しいです',
com_ui_input: '入力',
com_ui_close: '閉じる',
@ -75,8 +74,7 @@ export default {
com_auth_password_not_match: 'パスワードが一致しません',
com_auth_continue: '続ける',
com_auth_create_account: 'アカウント登録',
com_auth_error_create:
'アカウント登録に失敗しました。もう一度試してください。',
com_auth_error_create: 'アカウント登録に失敗しました。もう一度試してください。',
com_auth_full_name: '姓名',
com_auth_name_required: '姓名は必須です',
com_auth_name_min_length: '姓名は最低3文字は必要です',
@ -92,8 +90,7 @@ export default {
com_auth_here: 'こちら',
com_auth_to_reset_your_password: 'to reset your password.',
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_reset_password_success: 'パスワードリセットに成功しました',
@ -130,7 +127,8 @@ export default {
com_endpoint_google_maxoutputtokens:
' 生成されるレスポンスの最大トークン数。短いレスポンスには低い値を、長いレスポンスには高い値を指定する。',
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_prompt_prefix: 'プロンプトの先頭',
com_endpoint_temperature: 'Temperature',
@ -205,15 +203,18 @@ export default {
com_endpoint_config_key_encryption: '鍵は暗号化されます。削除予定日:',
com_endpoint_config_key_expiry: 'すでに有効期限切れ',
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:
'無効な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:
'サイトにログインした状態で、開発ツールまたは拡張機能を使用して、_U クッキーの内容をコピーします。もし失敗する場合は次の手順に従ってください。',
com_endpoint_config_key_edge_instructions: '手順',
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_copy_token: 'トークンをコピーしてください。',
com_endpoint_config_key_google_need_to: 'こちらを有効化する必要があります:',
@ -250,5 +251,4 @@ export default {
com_nav_search_placeholder: 'メッセージ検索',
com_nav_setting_general: '一般',
com_nav_setting_data: 'データ管理',
com_nav_language: '言語'
};

View file

@ -1,3 +1,5 @@
// Swedish phrases
export default {
com_ui_examples: 'Exempel', // Examples
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_limitations: 'Begränsningar', // Limitations
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_input: 'Inmatning', // Input
com_ui_close: 'Stäng', // Close
@ -46,8 +49,10 @@ export default {
com_ui_delete: 'Radera', // Delete
com_ui_delete_conversation: 'Radera chatt?', // Delete chat?
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_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_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_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_sign_up: 'Registrera dig', // Sign up
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_continue: 'Fortsätt', // Continue
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_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
@ -86,8 +92,10 @@ export default {
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_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_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_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_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_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.
@ -99,8 +107,10 @@ export default {
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_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_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_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_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_default_blank: 'standard: tom', // default: blank
com_endpoint_default_false: 'standard: falsk', // default: false
@ -111,12 +121,17 @@ export default {
com_endpoint_tone_style: 'Tonstil', // Tone Style
com_endpoint_token_count: 'Antal tokens', // Token count
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_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_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_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_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_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_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_prompt_prefix: 'Uppmaningsprefix', // Prompt Prefix
com_endpoint_temperature: 'Temperatur', // Temperature
@ -124,17 +139,27 @@ export default {
com_endpoint_top_p: 'Top P', // Top P
com_endpoint_top_k: 'Top K', // Top K
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_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.
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_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_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.
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_prompt_prefix_placeholder: 'Ange anpassade instruktioner att inkludera i Systemmeddelande. Standard: inga', // Set custom instructions to include in System Message. Default: none
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.
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_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_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.
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_frequency_penalty: 'Frekvensstraff', // Frequency 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_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_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_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
@ -159,7 +185,8 @@ export default {
com_endpoint_save: 'Spara', // Save
com_endpoint_export: 'Exportera', // Export
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_no_presets: 'Ingen förinställning ännu', // No preset yet
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_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_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_for: 'Ange API-nyckel för', // Set API Key for
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_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_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_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
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_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_copy_token: 'Kopiera åtkomstnyckel.', // Copy access token.
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_setting_general: 'Allmänt', // General
com_nav_setting_data: 'Datakontroller', // Data controls
}
};

View file

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