Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
open-webui
Commits
675328c8
Unverified
Commit
675328c8
authored
May 08, 2024
by
Timothy Jaeryang Baek
Committed by
GitHub
May 08, 2024
Browse files
Merge pull request #2002 from Yanyutin753/addAudio
🤩 Added custom openai tts models and role variables
parents
421a964a
5d6517c5
Changes
34
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
75 additions
and
7 deletions
+75
-7
backend/apps/audio/main.py
backend/apps/audio/main.py
+12
-0
backend/config.py
backend/config.py
+2
-0
src/lib/apis/audio/index.ts
src/lib/apis/audio/index.ts
+5
-2
src/lib/apis/openai/index.ts
src/lib/apis/openai/index.ts
+3
-2
src/lib/components/chat/Messages/ResponseMessage.svelte
src/lib/components/chat/Messages/ResponseMessage.svelte
+2
-1
src/lib/components/chat/Settings/Audio.svelte
src/lib/components/chat/Settings/Audio.svelte
+37
-2
src/lib/i18n/locales/ar-BH/translation.json
src/lib/i18n/locales/ar-BH/translation.json
+1
-0
src/lib/i18n/locales/bg-BG/translation.json
src/lib/i18n/locales/bg-BG/translation.json
+1
-0
src/lib/i18n/locales/bn-BD/translation.json
src/lib/i18n/locales/bn-BD/translation.json
+1
-0
src/lib/i18n/locales/ca-ES/translation.json
src/lib/i18n/locales/ca-ES/translation.json
+1
-0
src/lib/i18n/locales/de-DE/translation.json
src/lib/i18n/locales/de-DE/translation.json
+1
-0
src/lib/i18n/locales/dg-DG/translation.json
src/lib/i18n/locales/dg-DG/translation.json
+1
-0
src/lib/i18n/locales/en-GB/translation.json
src/lib/i18n/locales/en-GB/translation.json
+1
-0
src/lib/i18n/locales/en-US/translation.json
src/lib/i18n/locales/en-US/translation.json
+1
-0
src/lib/i18n/locales/es-ES/translation.json
src/lib/i18n/locales/es-ES/translation.json
+1
-0
src/lib/i18n/locales/fa-IR/translation.json
src/lib/i18n/locales/fa-IR/translation.json
+1
-0
src/lib/i18n/locales/fr-CA/translation.json
src/lib/i18n/locales/fr-CA/translation.json
+1
-0
src/lib/i18n/locales/fr-FR/translation.json
src/lib/i18n/locales/fr-FR/translation.json
+1
-0
src/lib/i18n/locales/it-IT/translation.json
src/lib/i18n/locales/it-IT/translation.json
+1
-0
src/lib/i18n/locales/ja-JP/translation.json
src/lib/i18n/locales/ja-JP/translation.json
+1
-0
No files found.
backend/apps/audio/main.py
View file @
675328c8
...
@@ -43,6 +43,8 @@ from config import (
...
@@ -43,6 +43,8 @@ from config import (
DEVICE_TYPE
,
DEVICE_TYPE
,
AUDIO_OPENAI_API_BASE_URL
,
AUDIO_OPENAI_API_BASE_URL
,
AUDIO_OPENAI_API_KEY
,
AUDIO_OPENAI_API_KEY
,
AUDIO_OPENAI_API_MODEL
,
AUDIO_OPENAI_API_VOICE
,
)
)
log
=
logging
.
getLogger
(
__name__
)
log
=
logging
.
getLogger
(
__name__
)
...
@@ -60,6 +62,8 @@ app.add_middleware(
...
@@ -60,6 +62,8 @@ app.add_middleware(
app
.
state
.
OPENAI_API_BASE_URL
=
AUDIO_OPENAI_API_BASE_URL
app
.
state
.
OPENAI_API_BASE_URL
=
AUDIO_OPENAI_API_BASE_URL
app
.
state
.
OPENAI_API_KEY
=
AUDIO_OPENAI_API_KEY
app
.
state
.
OPENAI_API_KEY
=
AUDIO_OPENAI_API_KEY
app
.
state
.
OPENAI_API_MODEL
=
AUDIO_OPENAI_API_MODEL
app
.
state
.
OPENAI_API_VOICE
=
AUDIO_OPENAI_API_VOICE
# setting device type for whisper model
# setting device type for whisper model
whisper_device_type
=
DEVICE_TYPE
if
DEVICE_TYPE
and
DEVICE_TYPE
==
"cuda"
else
"cpu"
whisper_device_type
=
DEVICE_TYPE
if
DEVICE_TYPE
and
DEVICE_TYPE
==
"cuda"
else
"cpu"
...
@@ -72,6 +76,8 @@ SPEECH_CACHE_DIR.mkdir(parents=True, exist_ok=True)
...
@@ -72,6 +76,8 @@ SPEECH_CACHE_DIR.mkdir(parents=True, exist_ok=True)
class
OpenAIConfigUpdateForm
(
BaseModel
):
class
OpenAIConfigUpdateForm
(
BaseModel
):
url
:
str
url
:
str
key
:
str
key
:
str
model
:
str
speaker
:
str
@
app
.
get
(
"/config"
)
@
app
.
get
(
"/config"
)
...
@@ -79,6 +85,8 @@ async def get_openai_config(user=Depends(get_admin_user)):
...
@@ -79,6 +85,8 @@ async def get_openai_config(user=Depends(get_admin_user)):
return
{
return
{
"OPENAI_API_BASE_URL"
:
app
.
state
.
OPENAI_API_BASE_URL
,
"OPENAI_API_BASE_URL"
:
app
.
state
.
OPENAI_API_BASE_URL
,
"OPENAI_API_KEY"
:
app
.
state
.
OPENAI_API_KEY
,
"OPENAI_API_KEY"
:
app
.
state
.
OPENAI_API_KEY
,
"OPENAI_API_MODEL"
:
app
.
state
.
OPENAI_API_MODEL
,
"OPENAI_API_VOICE"
:
app
.
state
.
OPENAI_API_VOICE
,
}
}
...
@@ -91,11 +99,15 @@ async def update_openai_config(
...
@@ -91,11 +99,15 @@ async def update_openai_config(
app
.
state
.
OPENAI_API_BASE_URL
=
form_data
.
url
app
.
state
.
OPENAI_API_BASE_URL
=
form_data
.
url
app
.
state
.
OPENAI_API_KEY
=
form_data
.
key
app
.
state
.
OPENAI_API_KEY
=
form_data
.
key
app
.
state
.
OPENAI_API_MODEL
=
form_data
.
model
app
.
state
.
OPENAI_API_VOICE
=
form_data
.
speaker
return
{
return
{
"status"
:
True
,
"status"
:
True
,
"OPENAI_API_BASE_URL"
:
app
.
state
.
OPENAI_API_BASE_URL
,
"OPENAI_API_BASE_URL"
:
app
.
state
.
OPENAI_API_BASE_URL
,
"OPENAI_API_KEY"
:
app
.
state
.
OPENAI_API_KEY
,
"OPENAI_API_KEY"
:
app
.
state
.
OPENAI_API_KEY
,
"OPENAI_API_MODEL"
:
app
.
state
.
OPENAI_API_MODEL
,
"OPENAI_API_VOICE"
:
app
.
state
.
OPENAI_API_VOICE
,
}
}
...
...
backend/config.py
View file @
675328c8
...
@@ -586,6 +586,8 @@ IMAGE_GENERATION_MODEL = os.getenv("IMAGE_GENERATION_MODEL", "")
...
@@ -586,6 +586,8 @@ IMAGE_GENERATION_MODEL = os.getenv("IMAGE_GENERATION_MODEL", "")
AUDIO_OPENAI_API_BASE_URL
=
os
.
getenv
(
"AUDIO_OPENAI_API_BASE_URL"
,
OPENAI_API_BASE_URL
)
AUDIO_OPENAI_API_BASE_URL
=
os
.
getenv
(
"AUDIO_OPENAI_API_BASE_URL"
,
OPENAI_API_BASE_URL
)
AUDIO_OPENAI_API_KEY
=
os
.
getenv
(
"AUDIO_OPENAI_API_KEY"
,
OPENAI_API_KEY
)
AUDIO_OPENAI_API_KEY
=
os
.
getenv
(
"AUDIO_OPENAI_API_KEY"
,
OPENAI_API_KEY
)
AUDIO_OPENAI_API_MODEL
=
os
.
getenv
(
"AUDIO_OPENAI_API_MODEL"
,
"tts-1"
)
AUDIO_OPENAI_API_VOICE
=
os
.
getenv
(
"AUDIO_OPENAI_API_VOICE"
,
"alloy"
)
####################################
####################################
# LiteLLM
# LiteLLM
...
...
src/lib/apis/audio/index.ts
View file @
675328c8
...
@@ -30,6 +30,8 @@ export const getAudioConfig = async (token: string) => {
...
@@ -30,6 +30,8 @@ export const getAudioConfig = async (token: string) => {
type
OpenAIConfigForm
=
{
type
OpenAIConfigForm
=
{
url
:
string
;
url
:
string
;
key
:
string
;
key
:
string
;
model
:
string
;
speaker
:
string
;
};
};
export
const
updateAudioConfig
=
async
(
token
:
string
,
payload
:
OpenAIConfigForm
)
=>
{
export
const
updateAudioConfig
=
async
(
token
:
string
,
payload
:
OpenAIConfigForm
)
=>
{
...
@@ -95,7 +97,8 @@ export const transcribeAudio = async (token: string, file: File) => {
...
@@ -95,7 +97,8 @@ export const transcribeAudio = async (token: string, file: File) => {
export
const
synthesizeOpenAISpeech
=
async
(
export
const
synthesizeOpenAISpeech
=
async
(
token
:
string
=
''
,
token
:
string
=
''
,
speaker
:
string
=
'
alloy
'
,
speaker
:
string
=
'
alloy
'
,
text
:
string
=
''
text
:
string
=
''
,
model
:
string
=
'
tts-1
'
)
=>
{
)
=>
{
let
error
=
null
;
let
error
=
null
;
...
@@ -106,7 +109,7 @@ export const synthesizeOpenAISpeech = async (
...
@@ -106,7 +109,7 @@ export const synthesizeOpenAISpeech = async (
'
Content-Type
'
:
'
application/json
'
'
Content-Type
'
:
'
application/json
'
},
},
body
:
JSON
.
stringify
({
body
:
JSON
.
stringify
({
model
:
'
tts-1
'
,
model
:
model
,
input
:
text
,
input
:
text
,
voice
:
speaker
voice
:
speaker
})
})
...
...
src/lib/apis/openai/index.ts
View file @
675328c8
...
@@ -239,7 +239,8 @@ export const generateOpenAIChatCompletion = async (
...
@@ -239,7 +239,8 @@ export const generateOpenAIChatCompletion = async (
export
const
synthesizeOpenAISpeech
=
async
(
export
const
synthesizeOpenAISpeech
=
async
(
token
:
string
=
''
,
token
:
string
=
''
,
speaker
:
string
=
'
alloy
'
,
speaker
:
string
=
'
alloy
'
,
text
:
string
=
''
text
:
string
=
''
,
model
:
string
=
'
tts-1
'
)
=>
{
)
=>
{
let
error
=
null
;
let
error
=
null
;
...
@@ -250,7 +251,7 @@ export const synthesizeOpenAISpeech = async (
...
@@ -250,7 +251,7 @@ export const synthesizeOpenAISpeech = async (
'
Content-Type
'
:
'
application/json
'
'
Content-Type
'
:
'
application/json
'
},
},
body
:
JSON
.
stringify
({
body
:
JSON
.
stringify
({
model
:
'
tts-1
'
,
model
:
model
,
input
:
text
,
input
:
text
,
voice
:
speaker
voice
:
speaker
})
})
...
...
src/lib/components/chat/Messages/ResponseMessage.svelte
View file @
675328c8
...
@@ -227,7 +227,8 @@
...
@@ -227,7 +227,8 @@
const res = await synthesizeOpenAISpeech(
const res = await synthesizeOpenAISpeech(
localStorage.token,
localStorage.token,
$settings?.audio?.speaker,
$settings?.audio?.speaker,
sentence
sentence,
$settings?.audio?.model
).catch((error) => {
).catch((error) => {
toast.error(error);
toast.error(error);
...
...
src/lib/components/chat/Settings/Audio.svelte
View file @
675328c8
...
@@ -26,6 +26,8 @@
...
@@ -26,6 +26,8 @@
let
voices
=
[];
let
voices
=
[];
let
speaker
=
''
;
let
speaker
=
''
;
let
models
=
[];
let
model
=
''
;
const
getOpenAIVoices
=
()
=>
{
const
getOpenAIVoices
=
()
=>
{
voices
=
[
voices
=
[
...
@@ -38,6 +40,10 @@
...
@@ -38,6 +40,10 @@
];
];
};
};
const
getOpenAIVoicesModel
=
()
=>
{
models
=
[{
name
:
'tts-1'
},
{
name
:
'tts-1-hd'
}];
};
const
getWebAPIVoices
=
()
=>
{
const
getWebAPIVoices
=
()
=>
{
const
getVoicesLoop
=
setInterval
(
async
()
=>
{
const
getVoicesLoop
=
setInterval
(
async
()
=>
{
voices
=
await
speechSynthesis
.
getVoices
();
voices
=
await
speechSynthesis
.
getVoices
();
...
@@ -78,12 +84,16 @@
...
@@ -78,12 +84,16 @@
if
(
TTSEngine
===
'openai'
)
{
if
(
TTSEngine
===
'openai'
)
{
const
res
=
await
updateAudioConfig
(
localStorage
.
token
,
{
const
res
=
await
updateAudioConfig
(
localStorage
.
token
,
{
url
:
OpenAIUrl
,
url
:
OpenAIUrl
,
key: OpenAIKey
key
:
OpenAIKey
,
model
:
model
,
speaker
:
speaker
});
});
if
(
res
)
{
if
(
res
)
{
OpenAIUrl
=
res
.
OPENAI_API_BASE_URL
;
OpenAIUrl
=
res
.
OPENAI_API_BASE_URL
;
OpenAIKey
=
res
.
OPENAI_API_KEY
;
OpenAIKey
=
res
.
OPENAI_API_KEY
;
model
=
res
.
OPENAI_API_MODEL
;
speaker
=
res
.
OPENAI_API_VOICE
;
}
}
}
}
};
};
...
@@ -98,9 +108,11 @@
...
@@ -98,9 +108,11 @@
STTEngine
=
settings
?.
audio
?.
STTEngine
??
''
;
STTEngine
=
settings
?.
audio
?.
STTEngine
??
''
;
TTSEngine
=
settings
?.
audio
?.
TTSEngine
??
''
;
TTSEngine
=
settings
?.
audio
?.
TTSEngine
??
''
;
speaker
=
settings
?.
audio
?.
speaker
??
''
;
speaker
=
settings
?.
audio
?.
speaker
??
''
;
model
=
settings
?.
audio
?.
model
??
''
;
if
(
TTSEngine
===
'openai'
)
{
if
(
TTSEngine
===
'openai'
)
{
getOpenAIVoices
();
getOpenAIVoices
();
getOpenAIVoicesModel
();
}
else
{
}
else
{
getWebAPIVoices
();
getWebAPIVoices
();
}
}
...
@@ -111,6 +123,8 @@
...
@@ -111,6 +123,8 @@
if
(
res
)
{
if
(
res
)
{
OpenAIUrl
=
res
.
OPENAI_API_BASE_URL
;
OpenAIUrl
=
res
.
OPENAI_API_BASE_URL
;
OpenAIKey
=
res
.
OPENAI_API_KEY
;
OpenAIKey
=
res
.
OPENAI_API_KEY
;
model
=
res
.
OPENAI_API_MODEL
;
speaker
=
res
.
OPENAI_API_VOICE
;
}
}
}
}
});
});
...
@@ -126,7 +140,8 @@
...
@@ -126,7 +140,8 @@
audio
:
{
audio
:
{
STTEngine
:
STTEngine
!== '' ? STTEngine : undefined,
STTEngine
:
STTEngine
!== '' ? STTEngine : undefined,
TTSEngine
:
TTSEngine
!== '' ? TTSEngine : undefined,
TTSEngine
:
TTSEngine
!== '' ? TTSEngine : undefined,
speaker: speaker !== '' ? speaker : undefined
speaker
:
speaker
!== '' ? speaker : undefined,
model
:
model
!== '' ? model : undefined
}
}
});
});
dispatch
(
'save'
);
dispatch
(
'save'
);
...
@@ -215,6 +230,7 @@
...
@@ -215,6 +230,7 @@
if
(
e
.
target
.
value
===
'openai'
)
{
if
(
e
.
target
.
value
===
'openai'
)
{
getOpenAIVoices
();
getOpenAIVoices
();
speaker
=
'alloy'
;
speaker
=
'alloy'
;
model
=
'tts-1'
;
}
else
{
}
else
{
getWebAPIVoices
();
getWebAPIVoices
();
speaker
=
''
;
speaker
=
''
;
...
@@ -307,6 +323,25 @@
...
@@ -307,6 +323,25 @@
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
<
div
>
<
div
class
=
" mb-2.5 text-sm font-medium"
>{$
i18n
.
t
(
'Set Model'
)}</
div
>
<
div
class
=
"flex w-full"
>
<
div
class
=
"flex-1"
>
<
input
list
=
"model-list"
class
=
"w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
bind
:
value
={
model
}
placeholder
=
"Select a model"
/>
<
datalist
id
=
"model-list"
>
{#
each
models
as
model
}
<
option
value
={
model
.
name
}
/>
{/
each
}
</
datalist
>
</
div
>
</
div
>
</
div
>
{/
if
}
{/
if
}
</
div
>
</
div
>
...
...
src/lib/i18n/locales/ar-BH/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"ضبط الخطوات"
,
"Set Steps"
:
"ضبط الخطوات"
,
"Set Title Auto-Generation Model"
:
"قم بتعيين نموذج إنشاء العنوان تلقائيًا"
,
"Set Title Auto-Generation Model"
:
"قم بتعيين نموذج إنشاء العنوان تلقائيًا"
,
"Set Voice"
:
"ضبط الصوت"
,
"Set Voice"
:
"ضبط الصوت"
,
"Set Model"
:
"ضبط النموذج"
,
"Settings"
:
"الاعدادات"
,
"Settings"
:
"الاعدادات"
,
"Settings saved successfully!"
:
"تم حفظ الاعدادات بنجاح"
,
"Settings saved successfully!"
:
"تم حفظ الاعدادات بنجاح"
,
"Share"
:
"كشاركة"
,
"Share"
:
"كشاركة"
,
...
...
src/lib/i18n/locales/bg-BG/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"Задай Стъпки"
,
"Set Steps"
:
"Задай Стъпки"
,
"Set Title Auto-Generation Model"
:
"Задай Модел за Автоматично Генериране на Заглавие"
,
"Set Title Auto-Generation Model"
:
"Задай Модел за Автоматично Генериране на Заглавие"
,
"Set Voice"
:
"Задай Глас"
,
"Set Voice"
:
"Задай Глас"
,
"Set Model"
:
"Задай Модел"
,
"Settings"
:
"Настройки"
,
"Settings"
:
"Настройки"
,
"Settings saved successfully!"
:
"Настройките са запазени успешно!"
,
"Settings saved successfully!"
:
"Настройките са запазени успешно!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/bn-BD/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"পরবর্তী ধাপসমূহ"
,
"Set Steps"
:
"পরবর্তী ধাপসমূহ"
,
"Set Title Auto-Generation Model"
:
"শিরোনাম অটোজেনারেশন মডেন নির্ধারণ করুন"
,
"Set Title Auto-Generation Model"
:
"শিরোনাম অটোজেনারেশন মডেন নির্ধারণ করুন"
,
"Set Voice"
:
"কন্ঠস্বর নির্ধারণ করুন"
,
"Set Voice"
:
"কন্ঠস্বর নির্ধারণ করুন"
,
"Set Model"
:
"মডেল নির্ধারণ করুন"
,
"Settings"
:
"সেটিংসমূহ"
,
"Settings"
:
"সেটিংসমূহ"
,
"Settings saved successfully!"
:
"সেটিংগুলো সফলভাবে সংরক্ষিত হয়েছে"
,
"Settings saved successfully!"
:
"সেটিংগুলো সফলভাবে সংরক্ষিত হয়েছে"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/ca-ES/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"Estableix Passos"
,
"Set Steps"
:
"Estableix Passos"
,
"Set Title Auto-Generation Model"
:
"Estableix Model d'Auto-Generació de Títol"
,
"Set Title Auto-Generation Model"
:
"Estableix Model d'Auto-Generació de Títol"
,
"Set Voice"
:
"Estableix Veu"
,
"Set Voice"
:
"Estableix Veu"
,
"Set Model"
:
"Estableix Model"
,
"Settings"
:
"Configuracions"
,
"Settings"
:
"Configuracions"
,
"Settings saved successfully!"
:
"Configuracions guardades amb èxit!"
,
"Settings saved successfully!"
:
"Configuracions guardades amb èxit!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/de-DE/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"Schritte festlegen"
,
"Set Steps"
:
"Schritte festlegen"
,
"Set Title Auto-Generation Model"
:
"Modell für automatische Titelgenerierung festlegen"
,
"Set Title Auto-Generation Model"
:
"Modell für automatische Titelgenerierung festlegen"
,
"Set Voice"
:
"Stimme festlegen"
,
"Set Voice"
:
"Stimme festlegen"
,
"Set Model"
:
"Modell festlegen"
,
"Settings"
:
"Einstellungen"
,
"Settings"
:
"Einstellungen"
,
"Settings saved successfully!"
:
"Einstellungen erfolgreich gespeichert!"
,
"Settings saved successfully!"
:
"Einstellungen erfolgreich gespeichert!"
,
"Share"
:
"Teilen"
,
"Share"
:
"Teilen"
,
...
...
src/lib/i18n/locales/dg-DG/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"Set Steps so many steps"
,
"Set Steps"
:
"Set Steps so many steps"
,
"Set Title Auto-Generation Model"
:
"Set Title Auto-Generation Model very auto-generate"
,
"Set Title Auto-Generation Model"
:
"Set Title Auto-Generation Model very auto-generate"
,
"Set Voice"
:
"Set Voice so speak"
,
"Set Voice"
:
"Set Voice so speak"
,
"Set Model"
:
"Set Model so speak"
,
"Settings"
:
"Settings much settings"
,
"Settings"
:
"Settings much settings"
,
"Settings saved successfully!"
:
"Settings saved successfully! Very success!"
,
"Settings saved successfully!"
:
"Settings saved successfully! Very success!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/en-GB/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
""
,
"Set Steps"
:
""
,
"Set Title Auto-Generation Model"
:
""
,
"Set Title Auto-Generation Model"
:
""
,
"Set Voice"
:
""
,
"Set Voice"
:
""
,
"Set Model"
:
""
,
"Settings"
:
""
,
"Settings"
:
""
,
"Settings saved successfully!"
:
""
,
"Settings saved successfully!"
:
""
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/en-US/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
""
,
"Set Steps"
:
""
,
"Set Title Auto-Generation Model"
:
""
,
"Set Title Auto-Generation Model"
:
""
,
"Set Voice"
:
""
,
"Set Voice"
:
""
,
"Set Model"
:
""
,
"Settings"
:
""
,
"Settings"
:
""
,
"Settings saved successfully!"
:
""
,
"Settings saved successfully!"
:
""
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/es-ES/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"Establecer Pasos"
,
"Set Steps"
:
"Establecer Pasos"
,
"Set Title Auto-Generation Model"
:
"Establecer modelo de generación automática de títulos"
,
"Set Title Auto-Generation Model"
:
"Establecer modelo de generación automática de títulos"
,
"Set Voice"
:
"Establecer la voz"
,
"Set Voice"
:
"Establecer la voz"
,
"Set Model"
:
"Establecer el modelo"
,
"Settings"
:
"Configuración"
,
"Settings"
:
"Configuración"
,
"Settings saved successfully!"
:
"¡Configuración guardada exitosamente!"
,
"Settings saved successfully!"
:
"¡Configuración guardada exitosamente!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/fa-IR/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"تنظیم گام
\u
200cها"
,
"Set Steps"
:
"تنظیم گام
\u
200cها"
,
"Set Title Auto-Generation Model"
:
"تنظیم مدل تولید خودکار عنوان"
,
"Set Title Auto-Generation Model"
:
"تنظیم مدل تولید خودکار عنوان"
,
"Set Voice"
:
"تنظیم صدا"
,
"Set Voice"
:
"تنظیم صدا"
,
"Set Model"
:
"تنظیم مدل"
,
"Settings"
:
"تنظیمات"
,
"Settings"
:
"تنظیمات"
,
"Settings saved successfully!"
:
"تنظیمات با موفقیت ذخیره شد!"
,
"Settings saved successfully!"
:
"تنظیمات با موفقیت ذخیره شد!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/fr-CA/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"Définir les étapes"
,
"Set Steps"
:
"Définir les étapes"
,
"Set Title Auto-Generation Model"
:
"Définir le modèle de génération automatique de titre"
,
"Set Title Auto-Generation Model"
:
"Définir le modèle de génération automatique de titre"
,
"Set Voice"
:
"Définir la voix"
,
"Set Voice"
:
"Définir la voix"
,
"Set Model"
:
"Configurer le modèle"
,
"Settings"
:
"Paramètres"
,
"Settings"
:
"Paramètres"
,
"Settings saved successfully!"
:
"Paramètres enregistrés avec succès !"
,
"Settings saved successfully!"
:
"Paramètres enregistrés avec succès !"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/fr-FR/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"Définir les étapes"
,
"Set Steps"
:
"Définir les étapes"
,
"Set Title Auto-Generation Model"
:
"Définir le modèle de génération automatique de titre"
,
"Set Title Auto-Generation Model"
:
"Définir le modèle de génération automatique de titre"
,
"Set Voice"
:
"Définir la voix"
,
"Set Voice"
:
"Définir la voix"
,
"Set Model"
:
"Définir le modèle"
,
"Settings"
:
"Paramètres"
,
"Settings"
:
"Paramètres"
,
"Settings saved successfully!"
:
"Paramètres enregistrés avec succès !"
,
"Settings saved successfully!"
:
"Paramètres enregistrés avec succès !"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/it-IT/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"Imposta passaggi"
,
"Set Steps"
:
"Imposta passaggi"
,
"Set Title Auto-Generation Model"
:
"Imposta modello di generazione automatica del titolo"
,
"Set Title Auto-Generation Model"
:
"Imposta modello di generazione automatica del titolo"
,
"Set Voice"
:
"Imposta voce"
,
"Set Voice"
:
"Imposta voce"
,
"Set Model"
:
"Imposta modello"
,
"Settings"
:
"Impostazioni"
,
"Settings"
:
"Impostazioni"
,
"Settings saved successfully!"
:
"Impostazioni salvate con successo!"
,
"Settings saved successfully!"
:
"Impostazioni salvate con successo!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/ja-JP/translation.json
View file @
675328c8
...
@@ -391,6 +391,7 @@
...
@@ -391,6 +391,7 @@
"Set Steps"
:
"ステップを設定"
,
"Set Steps"
:
"ステップを設定"
,
"Set Title Auto-Generation Model"
:
"タイトル自動生成モデルを設定"
,
"Set Title Auto-Generation Model"
:
"タイトル自動生成モデルを設定"
,
"Set Voice"
:
"音声を設定"
,
"Set Voice"
:
"音声を設定"
,
"Set Model"
:
"モデルを設定"
,
"Settings"
:
"設定"
,
"Settings"
:
"設定"
,
"Settings saved successfully!"
:
"設定が正常に保存されました!"
,
"Settings saved successfully!"
:
"設定が正常に保存されました!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment