Revert of AI service changes (#16428)

This commit is contained in:
Barry Rowe 2024-04-12 16:17:24 -07:00 committed by GitHub
parent 6671916c78
commit 26a824caff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
42 changed files with 1132 additions and 2925 deletions

View File

@ -31,36 +31,11 @@
#endif
#include "configuration.h"
#include "tasks/tasks_internal.h"
#ifdef HAVE_THREADS
#include "rthreads/rthreads.h"
#endif
typedef struct
{
/* The last request task, used to prepare and send the translation */
retro_task_t *request_task;
/* The last response task, used to parse costly translation data */
retro_task_t *response_task;
/* Timestamp of the last translation request */
retro_time_t last_call;
#ifdef HAVE_THREADS
/* Necessary because last_image is manipulated by task handlers */
slock_t *image_lock;
#endif
/* Frame captured during the last call to the translation service */
uint8_t *last_image;
unsigned last_image_size;
/* 1 if the automatic mode has been enabled, 0 otherwise */
int ai_service_auto;
/* Text-to-speech narrator override flag */
/* Is text-to-speech accessibility turned on? */
bool enabled;
} access_state_t;
@ -71,86 +46,46 @@ bool is_narrator_running(bool accessibility_enable);
#endif
/*
Invoke this method to send a request to the AI service.
It makes the following POST request using URL params:
source_lang (optional): language code of the content currently running.
target_lang (optional): language of the content to return.
output: comma-separated list of formats that must be provided by the
service. Also lists supported sub-formats.
This function does all the stuff needed to translate the game screen,
using the URL given in the settings. Once the image from the frame
buffer is sent to the server, the callback will write the translated
image to the screen.
The currently supported formats are:
sound: raw audio to playback. (wav)
text: text to be read through internal text-to-speech capabilities.
'subs' can be specified on top of that to explain that we are looking
for short text response in the manner of subtitles.
image: image to display on top of the video feed. Widgets will be used
first if possible, otherwise we'll try to draw it directly on the
video buffer. (bmp, png, png-a) [All in 24-bits BGR formats]
Supported client/services (thus far)
-VGTranslate client ( www.gitlab.com/spherebeaker/vg_translate )
-Ztranslate client/service ( www.ztranslate.net/docs/service )
In addition, the request contains a JSON payload, formatted as such:
image: captured frame from the currently running content (in base64).
format: format of the captured frame ("png", or "bmp").
coords: array describing the coordinates of the image within the
viewport space (x, y, width, height).
viewport: array describing the size of the viewport (width, height).
label: a text string describing the content (<system id>__<content id>).
state: a JSON object describing the state of the frontend, containing:
paused: 1 if the content has been paused, 0 otherwise.
<key>: the name of a retropad input, valued 1 if pressed.
(a, b, x, y, l, r, l2, r2, l3, r3)
(up, down, left, right, start, select)
To use a client, download the relevant code/release, configure
them, and run them on your local machine, or network. Set the
retroarch configuration to point to your local client (usually
listening on localhost:4404 ) and enable translation service.
The translation component then expects a response from the AI service in the
form of a JSON payload, formatted as such:
image: base64 representation of an image in a supported format.
sound: base64 representation of a sound byte in a supported format.
text: results from the service as a string.
text_position: hint for the position of the text when the service is
running in text mode (ie subtitles). Position is a number,
1 for Bottom or 2 for Top (defaults to bottom).
press: a list of retropad input to forcibly press. On top of the
expected keys (cf. 'state' above) values 'pause' and 'unpause' can be
specified to control the flow of the content.
error: any error encountered with the request.
auto: either 'auto' or 'continue' to control automatic requests.
If you don't want to run a client, you can also use a service,
which is basically like someone running a client for you. The
downside here is that your retroarch device will have to have
an internet connection, and you may have to sign up for it.
All fields are optional, but at least one of them must be present.
If 'error' is set, the error is shown to the user and everything else is
ignored, even 'auto' settings.
To make your own server, it must listen for a POST request, which
will consist of a JSON body, with the "image" field as a base64
encoded string of a 24bit-BMP/PNG that the will be translated.
The server must output the translated image in the form of a
JSON body, with the "image" field also as a base64 encoded
24bit-BMP, or as an alpha channel png.
With 'auto' on 'auto', RetroArch will automatically send a new request
(with a minimum delay enforced by uints.ai_service_poll_delay), with a value
of 'continue', RetroArch will ignore the returned content and skip to the
next automatic request. This allows the service to specify that the returned
content is the same as the one previously sent, so RetroArch does not need to
update its display unless necessary. With 'continue' the service *must*
still send the content, as we may need to display it if the user paused the
AI service for instance.
{paused} boolean is passed in to indicate if the current call was made
during a paused frame. Due to how the menu widgets work, if the AI service
is called in 'auto' mode, then this call will be made while the menu widgets
unpause the core for a frame to update the on-screen widgets. To tell the AI
service what the pause mode is honestly, we store the runloop_paused
variable from before the service wipes the widgets, and pass that in here.
"paused" boolean is passed in to indicate if the current call
was made during a paused frame. Due to how the menu widgets work,
if the ai service is called in "auto" mode, then this call will
be made while the menu widgets unpause the core for a frame to update
the on-screen widgets. To tell the ai service what the pause
mode is honestly, we store the runloop_paused variable from before
the handle_translation_cb wipes the widgets, and pass that in here.
*/
bool run_translation_service(settings_t *settings, bool paused);
void translation_release(bool inform);
/* Proxy for calls related to menu navigation */
bool navigation_say(
bool accessibility_speak_priority(
bool accessibility_enable,
unsigned accessibility_narrator_speech_speed,
const char* speak_text,
int priority);
/* Local platform-specific TTS */
bool accessibility_speak_priority(
unsigned accessibility_narrator_speech_speed,
const char *speak_text,
int priority,
const char* voice);
const char* speak_text, int priority);
access_state_t *access_state_get_ptr(void);

View File

@ -1822,14 +1822,8 @@
#define DEFAULT_AI_SERVICE_MODE 1
#define DEFAULT_AI_SERVICE_TEXT_POSITION 0
#define DEFAULT_AI_SERVICE_TEXT_PADDING 5
#define DEFAULT_AI_SERVICE_URL "http://localhost:4404/"
#define DEFAULT_AI_SERVICE_POLL_DELAY 0
#define MAXIMUM_AI_SERVICE_POLL_DELAY 500
#if defined(HAVE_FFMPEG) || defined(HAVE_MPV)
#define DEFAULT_BUILTIN_MEDIAPLAYER_ENABLE true
#else

View File

@ -2511,9 +2511,6 @@ static struct config_uint_setting *populate_settings_uint(
SETTING_UINT("ai_service_mode", &settings->uints.ai_service_mode, true, DEFAULT_AI_SERVICE_MODE, false);
SETTING_UINT("ai_service_target_lang", &settings->uints.ai_service_target_lang, true, 0, false);
SETTING_UINT("ai_service_source_lang", &settings->uints.ai_service_source_lang, true, 0, false);
SETTING_UINT("ai_service_poll_delay", &settings->uints.ai_service_poll_delay, true, DEFAULT_AI_SERVICE_POLL_DELAY, false);
SETTING_UINT("ai_service_text_position", &settings->uints.ai_service_text_position, true, DEFAULT_AI_SERVICE_TEXT_POSITION, false);
SETTING_UINT("ai_service_text_padding", &settings->uints.ai_service_text_padding, true, DEFAULT_AI_SERVICE_TEXT_PADDING, false);
#ifdef HAVE_LIBNX
SETTING_UINT("libnx_overclock", &settings->uints.libnx_overclock, true, SWITCH_DEFAULT_CPU_PROFILE, false);

View File

@ -348,9 +348,6 @@ typedef struct settings
unsigned ai_service_mode;
unsigned ai_service_target_lang;
unsigned ai_service_source_lang;
unsigned ai_service_poll_delay;
unsigned ai_service_text_position;
unsigned ai_service_text_padding;
unsigned core_updater_auto_backup_history_size;
unsigned video_black_frame_insertion;

View File

@ -873,9 +873,10 @@ static bool is_narrator_running_macos(void)
}
static bool accessibility_speak_macos(int speed,
const char* speak_text, int priority, const char* voice)
const char* speak_text, int priority)
{
int pid;
const char *voice = get_user_language_iso639_1(false);
char* language_speaker = accessibility_mac_language_code(voice);
char* speeds[10] = {"80", "100", "125", "150", "170", "210",
"260", "310", "380", "450"};

View File

@ -2886,10 +2886,10 @@ static const char* accessibility_unix_language_code(const char* language)
}
static bool accessibility_speak_unix(int speed,
const char* speak_text, int priority, const char* voice)
const char* speak_text, int priority)
{
int pid;
const char* language = accessibility_unix_language_code(voice);
const char* language = accessibility_unix_language_code(get_user_language_iso639_1(true));
char* voice_out = (char*)malloc(3 + strlen(language));
char* speed_out = (char*)malloc(3 + 3);
const char* speeds[10] = {"80", "100", "125", "150", "170", "210", "260", "310", "380", "450"};

View File

@ -1035,9 +1035,10 @@ static bool is_narrator_running_windows(void)
}
static bool accessibility_speak_windows(int speed,
const char* speak_text, int priority, const char* voice)
const char* speak_text, int priority)
{
char cmd[512];
const char *voice = get_user_language_iso639_1(true);
const char *language = accessibility_win_language_code(voice);
const char *langid = accessibility_win_language_id(voice);
bool res = false;
@ -1081,12 +1082,9 @@ static bool accessibility_speak_windows(int speed,
if (!wc || res != 0)
{
RARCH_ERR("Error communicating with NVDA\n");
/* Fallback on powershell immediately and retry */
g_plat_win32_flags &= ~PLAT_WIN32_FLAG_USE_NVDA;
g_plat_win32_flags |= PLAT_WIN32_FLAG_USE_POWERSHELL;
if (wc)
free(wc);
return accessibility_speak_windows(speed, speak_text, priority, voice);
return false;
}
nvdaController_cancelSpeech_func();

View File

@ -112,7 +112,7 @@ typedef struct frontend_ctx_driver
enum retro_language (*get_user_language)(void);
bool (*is_narrator_running)(void);
bool (*accessibility_speak)(int speed,
const char* speak_text, int priority, const char* voice);
const char* speak_text, int priority);
bool (*set_gamemode)(bool on);
const char *ident;

View File

@ -1532,66 +1532,6 @@ static void INLINE gfx_widgets_font_unbind(gfx_widget_font_data_t *font_data)
font_driver_bind_block(font_data->font, NULL);
}
#ifdef HAVE_TRANSLATE
static void gfx_widgets_ai_line(
video_frame_info_t *video, char *line, int line_idx, int line_total)
{
settings_t *settings = config_get_ptr();
gfx_display_t *p_disp = (gfx_display_t*)video->disp_userdata;
dispgfx_widget_t *p_widget = (dispgfx_widget_t*)video->widgets_userdata;
void *userdata = video->userdata;
unsigned video_width = video->width;
unsigned video_height = video->height;
int line_width = font_driver_get_message_width(
p_widget->gfx_widget_fonts.regular.font,
line, strlen(line), 1.0f);
int hpadding = p_widget->simple_widget_padding;
int vpadding = settings->uints.ai_service_text_padding;
int half_vw = video_width * 0.5f;
int block_width = line_width + hpadding * 2;
int block_height = p_widget->simple_widget_height;
int block_x = half_vw - block_width * 0.5f;
int block_y = 0;
int line_y = 0;
int position = (settings->uints.ai_service_text_position > 0)
? settings->uints.ai_service_text_position
: p_widget->ai_service_text_position;
switch (position)
{
case 0: /* Undef. */
case 1: /* Bottom */
block_y = (video_height * (100 - vpadding) * 0.01f)
- ((line_total - line_idx) * block_height);
break;
case 2: /* Top */
block_y = (video_height * (vpadding * 0.01f))
+ (line_idx * block_height);
break;
}
line_y = block_y + block_height * 0.5f
+ p_widget->gfx_widget_fonts.regular.line_centre_offset;
gfx_display_set_alpha(p_widget->backdrop_orig, DEFAULT_BACKDROP);
gfx_display_draw_quad(
p_disp, userdata, video_width, video_height,
block_x, block_y, block_width, block_height,
video_width, video_height,
p_widget->backdrop_orig,
NULL);
gfx_widgets_draw_text(
&p_widget->gfx_widget_fonts.regular,
line, half_vw, line_y,
video_width, video_height,
0xFFFFFFFF, TEXT_ALIGN_CENTER, true);
}
#endif
void gfx_widgets_frame(void *data)
{
@ -1642,7 +1582,12 @@ void gfx_widgets_frame(void *data)
/* AI Service overlay */
if (p_dispwidget->ai_service_overlay_state > 0)
{
size_t text_length = strlen(p_dispwidget->ai_service_text);
float outline_color[16] = {
0.00, 1.00, 0.00, 1.00,
0.00, 1.00, 0.00, 1.00,
0.00, 1.00, 0.00, 1.00,
0.00, 1.00, 0.00, 1.00,
};
gfx_display_set_alpha(p_dispwidget->pure_white, 1.0f);
@ -1669,46 +1614,62 @@ void gfx_widgets_frame(void *data)
dispctx->blend_end(userdata);
}
/* AI Service subtitle overlay widget */
if (text_length > 0)
{
int padding = p_dispwidget->simple_widget_padding;
int text_width = font_driver_get_message_width(
p_dispwidget->gfx_widget_fonts.regular.font,
p_dispwidget->ai_service_text,
text_length, 1.0f);
if (text_width > (video_width * 0.9f - padding * 2))
{
size_t text_half = text_length / 2;
char *extra_line = (char*)malloc(sizeof(char) * text_length);
for (; text_half > 0; text_half--)
{
if (p_dispwidget->ai_service_text[text_half] == ' ')
{
p_dispwidget->ai_service_text[text_half] = '\0';
gfx_widgets_ai_line(
video_info, p_dispwidget->ai_service_text, 0, 2);
strlcpy(
extra_line,
p_dispwidget->ai_service_text + text_half + 1,
text_length - text_half);
gfx_widgets_ai_line(
video_info, extra_line, 1, 2);
p_dispwidget->ai_service_text[text_half] = ' ';
free(extra_line);
break;
}
}
}
else
{
gfx_widgets_ai_line(
video_info, p_dispwidget->ai_service_text, 0, 1);
}
}
/* top line */
gfx_display_draw_quad(
p_disp,
userdata,
video_width, video_height,
0, 0,
video_width,
p_dispwidget->divider_width_1px,
video_width,
video_height,
outline_color,
NULL
);
/* bottom line */
gfx_display_draw_quad(
p_disp,
userdata,
video_width, video_height,
0,
video_height - p_dispwidget->divider_width_1px,
video_width,
p_dispwidget->divider_width_1px,
video_width,
video_height,
outline_color,
NULL
);
/* left line */
gfx_display_draw_quad(
p_disp,
userdata,
video_width,
video_height,
0,
0,
p_dispwidget->divider_width_1px,
video_height,
video_width,
video_height,
outline_color,
NULL
);
/* right line */
gfx_display_draw_quad(
p_disp,
userdata,
video_width, video_height,
video_width - p_dispwidget->divider_width_1px,
0,
p_dispwidget->divider_width_1px,
video_height,
video_width,
video_height,
outline_color,
NULL
);
if (p_dispwidget->ai_service_overlay_state == 2)
p_dispwidget->ai_service_overlay_state = 3;
}
@ -2259,7 +2220,6 @@ void gfx_widgets_ai_service_overlay_unload(void)
if (p_dispwidget->ai_service_overlay_state == 1)
{
video_driver_texture_unload(&p_dispwidget->ai_service_overlay_texture);
p_dispwidget->ai_service_text[0] = '\0';
p_dispwidget->ai_service_overlay_texture = 0;
p_dispwidget->ai_service_overlay_state = 0;
}

View File

@ -242,8 +242,6 @@ typedef struct dispgfx_widget
#ifdef HAVE_TRANSLATE
unsigned ai_service_overlay_width;
unsigned ai_service_overlay_height;
unsigned ai_service_text_position;
char ai_service_text[255];
#endif
uint8_t flags;

View File

@ -7147,7 +7147,7 @@ void input_keyboard_event(bool down, unsigned code,
say_char[1] = '\0';
if (character == 127 || character == 8)
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
"backspace", 10);
@ -7155,12 +7155,12 @@ void input_keyboard_event(bool down, unsigned code,
{
const char *lut_name = accessibility_lut_name(c);
if (lut_name)
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
lut_name, 10);
else if (character != 0)
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
say_char, 10);

View File

@ -5493,10 +5493,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"وضع المشرف"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"أعلى"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"المحفوظات والمفضلة"

View File

@ -6065,26 +6065,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Рэжым дыктара"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"Рэжым тэксту"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"Тэкст + дыктар"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"Выява + дыктар"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Унізе"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Угары"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Гісторыя ды ўпадабанае"

View File

@ -7002,31 +7002,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"服务将翻译成的语言。「默认」是英语。"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"AI 服务自动轮询延迟"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"自动调用之间采用最小延迟。降低反应但会提高CPU性能。"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"AI 服务文本位置覆盖"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"当服务处于文本模式时覆盖遮罩的位置。"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"AI 服务文本覆盖 (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"当服务处于文本模式时应用到文本遮罩层的垂直填充。 更多填充将把文本显示到屏幕中心。"
)
/* Settings > Accessibility */
MSG_HASH(
@ -10277,26 +10252,6 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"讲述人模式"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"文本模式"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"文本 + 解说"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"图像 + 解说"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"底端"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"顶部"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"历史和收藏"
@ -13048,22 +13003,6 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"核心安装失败"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"不支持 AI 服务的视频驱动程序。"
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"自动翻译已启用。"
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"自动翻译已禁用。"
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"没有要翻译的内容。"
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"按右键五次删除所有金手指。"

View File

@ -9465,10 +9465,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"自動朗讀模式"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"頂端"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"歷史和我的最愛"

View File

@ -6710,30 +6710,7 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"Jazyk, do kterého bude služba překládána. Výchozí hodnota je angličtina."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"Zpoždění automatického dotazování služby AI"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"Minimální prodleva v ms mezi automatickými voláními. Snižuje reaktivitu, ale zvyšuje výkon procesoru."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"Přepsání polohy textu služby AI"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"Přepsání pozice překryvu, když je služba v režimu Text."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"Výplň textu služby AI (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"Vertikální výplň, která se použije na překrytí textu, když je služba v režimu Text. Větší výplň posune text směrem ke středu obrazovky."
)
/* Settings > Accessibility */
@ -9909,26 +9886,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Režim vypravěče"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"Textový režim"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"Text + Vypravěč"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"Obrázek + Vypravěč"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Spodní"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Nahoře"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Historie a oblíbené položky"
@ -12684,22 +12642,7 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Instalace jádra selhala"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"Ovladač videa není podporován pro službu AI."
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Automatický překlad povolen."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Automatický překlad vypnut."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"Není co překládat."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Pětkrát stiskněte pravé tlačítko a smažte všechny cheaty."

View File

@ -6854,31 +6854,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"Die Sprache, in die der Dienst übersetzt. 'Standard' ist Englisch."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"Automatische Abfrageverzögerung für KI-Dienst"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"Mindestverzögerung in ms zwischen automatischen Aufrufen. Verringert die Reaktionszeit, erhöht aber die CPU-Leistung."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"KI-Dienst-Textposition überschreiben"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"Die Position des Overlays übersteuern, wenn sich der Dienst im Textmodus befindet."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"KI-Dienst-Textauffüllung (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"Vertikaler Abstand, der auf das Textoverlay angewendet wird, wenn der Dienst im Textmodus ist. Ein größeres Auffüllen schiebt den Text in die Mitte des Bildschirms."
)
/* Settings > Accessibility */
MSG_HASH(
@ -10029,26 +10004,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Erzählermodus"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"Textmodus"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"Text und Erzähler"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"Bild und Erzähler"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Unten"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Oben"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Verlauf & Favoriten"
@ -12672,22 +12628,6 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Core Installation fehlgeschlagen"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"Videotreiber wird für den KI-Dienst nicht unterstützt."
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Automatische Übersetzung aktiviert."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Automatische Übersetzung deaktiviert."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"Nichts zu übersetzen."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Drücke fünf Mal rechts, um alle Cheats zu löschen."

View File

@ -1034,10 +1034,7 @@ MSG_HASH(
/* Settings > AI Service */
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"Vertical padding to apply to the text overlay, when the service is in Text mode. More padding will push the text towards the centre of the screen."
)
/* Settings > Accessibility */

View File

@ -6966,31 +6966,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"Indica el idioma de destino de la traducción. En caso de seleccionar «Predeterminado», se traducirá a inglés."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"Retraso al autosondear con el servicio de IA"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"Indica el retraso mínimo (en ms) entre cada llamada automática. Reduce la reactividad, pero mejora el rendimiento de la CPU."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"Personalizar posición de textos del servicio de IA"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"Personaliza la posición de la superposición del modo Texto del servicio de IA."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"Relleno de textos del servicio de IA (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"Indica el relleno vertical que se añadirá a la superposición de textos cuando el servicio de IA esté configurado en el modo Texto. Si hay más relleno, el texto se desplazará hacia el centro de la pantalla."
)
/* Settings > Accessibility */
MSG_HASH(
@ -10229,26 +10204,6 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Modo narrador"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"Modo Texto"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"Texto + Narración"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"Imagen + Narración"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Giro de 180°"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Inicio"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Historial y favoritos"
@ -13000,22 +12955,7 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Error al instalar el núcleo"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"El controlador de vídeo no es compatible con el servicio de IA."
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Traducción automática activada."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Traducción automática desactivada."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"No hay nada que traducir."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Pulsa derecha cinco veces para eliminar todos los trucos."

View File

@ -5986,31 +5986,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"Kieli johon palvelu kääntää. 'Oletus' on englanti."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"Tekoälypalvelun automaattinen kyselyviive"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"Vähimmäisviive millisekunteina automaattisten kutsujen välillä. Laskee viivettä, mutta lisää prosessorin käyttöä."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"Tekoälypalvelun tekstin sijainnin muutos"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"Sijainnin muutos, kun palvelu on tekstitilassa."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"Tekoälypalvelun tekstin marginaali (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"Pystysuuntainen lisämarginaali, joka lisätään tekstipäällykseen tekstitilassa. Enemmän marginaalia työntää tekstin lähemmäksi näytön keskiosaa."
)
/* Settings > Accessibility */
MSG_HASH(
@ -8981,26 +8956,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Kertojatila"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"Tekstitila"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"Teksti + lukija"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"Kuva + lukija"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Alhaalla"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Yläreuna"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Historia ja suosikit"
@ -11724,22 +11680,7 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Ytimen asennus epäonnistui"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"Videoajuri ei tue tekoälyaplvelua."
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Automaattinen käännös käytössä."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Automaattinen käännös pois käytöstä."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"Ei mitään käännettävää."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Poista kaikki huijaukset painamalla oikealle viisi kertaa."

View File

@ -6926,31 +6926,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"La langue vers laquelle le service va traduire. 'Par défaut' est anglais."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"Délai d'interrogation automatique du service IA"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"Délai minimum en ms entre les appels automatiques. Diminue la réactivité, mais augmente les performances du processeur."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"Modification de la position du texte pour le service IA"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"Modifier la position de la surimpression, lorsque le service est en mode texte."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"Marge intérieure du texte pour le service IA (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"Marge verticale à appliquer au texte en surimpression, lorsque le service est en mode texte. Plus de remplissage poussera le texte vers le centre de l'écran."
)
/* Settings > Accessibility */
MSG_HASH(
@ -10149,26 +10124,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Mode narrateur"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"Mode texte"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"Texte + narrateur"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"Image + narrateur"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Bas"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Haut"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Historique et favoris"
@ -12972,22 +12928,7 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Installation du cœur échouée"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"Pilote vidéo non pris en charge pour le service IA."
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Traduction automatique activée."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Traduction automatique désactivée."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"Rien à traduire."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Appuyez cinq fois sur Droite pour supprimer tous les cheats."

View File

@ -6930,31 +6930,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"A fordítási szolgáltatás célnyelve. \"Alapértelmezett\" az angol."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"Az AI szolgáltatás lekérdezési késleltetése"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"Az automatikus hívások közti minimális késleltetés. Lassítja a reakcióidőt, de növeli a CPU teljesítményt."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"Az AI szolgáltatás szöveg helyzetének felülbírálata"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"A rátét pozíciójának felülbírálása, amikor a szolgáltatás Szöveges módban van."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"Az AI szolgáltatás szövegének kitöltése (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"A szöveges rátét függőleges kitöltése, amikor a szolgáltatás Szöveges módban van. Nagyobb kitöltés a szöveget a képernyő közepe felé mozdítja."
)
/* Settings > Accessibility */
MSG_HASH(
@ -10173,26 +10148,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Narrátor mód"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"Szöveges mód"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"Szöveg + narrátor"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"Kép + narrátor"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Felfordítás"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Felül"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Előzmények és kedvencek"
@ -12724,22 +12680,7 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Mag telepítése sikertelen"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"Az AI szolgáltatás nem támogatja ezt a videomeghajtót."
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Automatikus fordítás engedélyezve."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Automatikus fordítás letiltva."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"Nincs mit lefordítani."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Nyomja meg a jobbra gombot ötször minden csalás törléséhez."

View File

@ -6878,31 +6878,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"La lingua in cui il servizio si tradurrà. 'Predefinito' è l'inglese."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"Ritardo Auto-Polling Servizio IA"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"Ritardo minimo in ms tra le chiamate automatiche. Abbassa la reattività ma aumenta le prestazioni della CPU."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"Sostituzione Posizione Testo Servizio IA"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"Sovrascrivi la posizione dell'overlay, quando il servizio è in modalità Testo."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"Riempimento testo Servizio IA (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"Riempimento verticale da applicare al testo sovrapposto, quando il servizio è in modalità Testo. Più riempimento spingerà il testo verso il centro dello schermo."
)
/* Settings > Accessibility */
MSG_HASH(
@ -10101,26 +10076,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Modalità Narratore"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"Modalità Testo"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"Testo + Narratore"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"Immagine + Narratore"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Inferiore"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Alto"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Cronologia & Preferiti"
@ -12808,22 +12764,7 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Installazione core fallita"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"Il driver video non è supportato per il servizio IA."
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Traduzione automatica abilitata."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Traduzione automatica disabilitata."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"Niente da tradurre."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Premi a destra cinque volte per eliminare tutti i trucchi."

View File

@ -6966,30 +6966,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"サービスが翻訳した後の言語です。[デフォルト] は英語です。"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"AI サービスの自動ポーリング遅延"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"自動コール間の最小遅延ミリ秒です。反応性が低下しますが、CPU パフォーマンスが向上します。"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"AI サービスのテキスト位置優先"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"サービスがテキストモードの場合、オーバーレイの位置を上書きします。"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"AI サービステキスト余白 (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"サービスがテキストモードのとき、テキストオーバーレイに適用される垂直余白です。より多くの余白は、テキストを画面の中心に向かってプッシュします。"
)
/* Settings > Accessibility */
@ -10229,26 +10205,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"ナレーターモード"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"テキストモード"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"テキスト + ナレーター"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"画像 + ナレーター"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
""
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"先頭"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"履歴 & お気に入り"
@ -12948,22 +12905,7 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"コアのインストールに失敗しました"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"ビデオドライバが AI サービスに対応していません。"
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"自動翻訳を有効にしました。"
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"自動翻訳を無効にしました。"
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"翻訳するものはありません。"
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"すべてのチートを削除するには右を 5 回押してください。"

View File

@ -7010,31 +7010,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"서비스가 번역하여 표시할 언어입니다. '기본'을 선택하면 영어로 번역합니다."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"AI 서비스 자동 폴링 딜레이"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"자동 호출 사이의 최소 딜레이(ms)입니다. 반응성이 낮아지지만 CPU 성능을 높일 수 있습니다."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"AI 서비스 텍스트 위치 재정의"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"AI 서비스를 텍스트 모드로 사용할 때, 오버레이의 위치를 재정의합니다."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"AI 서비스 텍스트 패딩 (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"AI 서비스를 텍스트 모드로 사용할 때, 텍스트 오버레이에 적용될 수직 패딩입니다. 패딩을 늘리면 텍스트가 화면 가운데로 밀려납니다."
)
/* Settings > Accessibility */
MSG_HASH(
@ -10277,26 +10252,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"나레이터 모드"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"텍스트 모드"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"텍스트 + 나레이터"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"이미지 + 나레이터"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"아래"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"상단"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"최근 실행 & 즐겨찾기"
@ -13100,22 +13056,6 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"코어 설치 실패"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"이 비디오 드라이버에서는 AI 서비스를 사용할 수 없습니다."
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"자동 번역이 활성화되었습니다."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"자동 번역이 비활성화되었습니다."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"번역할 것이 없습니다."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"모든 치트를 삭제하려면 오른쪽을 다섯 번 입력하십시오."

View File

@ -6278,18 +6278,6 @@ MSG_HASH(
MENU_ENUM_LABEL_AI_SERVICE_SOURCE_LANG,
"ai_service_source_lang"
)
MSG_HASH(
MENU_ENUM_LABEL_AI_SERVICE_POLL_DELAY,
"ai_service_poll_delay"
)
MSG_HASH(
MENU_ENUM_LABEL_AI_SERVICE_TEXT_POSITION,
"ai_service_text_position"
)
MSG_HASH(
MENU_ENUM_LABEL_AI_SERVICE_TEXT_PADDING,
"ai_service_text_padding"
)
MSG_HASH(
MENU_ENUM_LABEL_SETTINGS_SHOW_DRIVERS,
"settings_show_drivers"

View File

@ -6298,23 +6298,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"Język, który serwis przetłumaczy. \"Domyślnie\" to język angielski."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"Opóźnienie automatycznego sprawdzania usług AI"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"Minimalne opóźnienie w ms między połączeniami automatycznymi. Obniża reaktywność, ale zwiększa wydajność procesora."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"Zastępowanie pozycji tekstowej usługi AI"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"Zastąp pozycję nakładki, gdy usługa jest w trybie tekstowym."
)
/* Settings > Accessibility */
MSG_HASH(
@ -9085,10 +9068,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Tryb Narratora"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Dolny"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Historia i Ulubione"

View File

@ -8541,14 +8541,6 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Modo narrador"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Embaixo"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Topo"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Histórico e favoritos"
@ -11128,18 +11120,6 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Falha na instalação do núcleo"
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Tradução automática ativada."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Tradução automática desativada."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"Nada para traduzir."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Pressione direita cinco vezes para excluir todas as trapaças."

View File

@ -6990,31 +6990,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"Язык, на который будет осуществляться перевод. По умолчанию используется английский."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"Задержка автоопроса AI-сервиса"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"Минимальная задержка (в мс) между автом. вызовами. Снижает быстродействие, но повышает производительность CPU."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"Переопределение положения текста"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"Изменяет положение оверлея при использовании AI-сервиса в режиме текста."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"Смещение текста (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"Отступ по вертикали для наложения при использовании AI-сервиса в режиме текста. При увеличении отступа текст будет смещаться к центру экрана."
)
/* Settings > Accessibility */
MSG_HASH(
@ -10249,26 +10224,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Режим диктора"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"Режим текста"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"Текст + диктор"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"Изображение + диктор"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Внизу"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Вверху"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"История и избранное"
@ -13024,22 +12980,6 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Не удалось установить ядро"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"Видеодрайвер не поддерживается AI-сервисом."
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Автоматический перевод включен."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Автоматический перевод выключен."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"Нет данных для перевода."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Нажмите вправо пять раз для удаления всех чит-кодов."

View File

@ -4949,14 +4949,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_SPEECH_MODE,
"Režim reči"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Dole"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Hore"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"História & Obľúbené"

View File

@ -7017,14 +7017,7 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_MODE,
"Bildläge"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Underkant"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Toppen"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Historik & Favoriter"
@ -8820,18 +8813,7 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Kärninstallation misslyckad"
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Automatisk översättning aktiverad."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Automatisk översättning inaktiverad."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"Inget att översätta"
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Tryck höger 5 gånger för att radera alla fusk."

View File

@ -6970,30 +6970,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"Hizmetin çevireceği dil. \"Varsayılan\" İngilizcedir."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"Çeviri Hizmeti Otomatik Seçim Gecikmesi"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"Otomatik çağrılar arasında ms cinsinden asgari gecikme. Tepkimeyi azaltır ancak CPU performansını artırır."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"Çeviri Hizmeti Metin Konumunu Özelleştir"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"Hizmet Metin modundayken kaplamanın konumunu özelleştirin."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"Çeviri Hizmeti Metin Dolgusu (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"Hizmet Metin modundayken metin kaplamasına uygulanacak dikey dolgu. Daha fazla dolgu, metni ekranın ortasına doğru itecektir."
)
/* Settings > Accessibility */
@ -10229,26 +10205,6 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Ekran Okuyucusu Kipi"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"Metin Modu"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"Metin + Anlatıcı"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"Resim + Anlatıcı"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Alt"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Üst"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Geçmiş & Sık Kullanılanlar"
@ -13088,22 +13044,6 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Çekirdek kurulumu başarısız"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"Video sürücüsü Çeviri Hizmeti için desteklenmiyor."
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Otomatik çeviri etkin."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Otomatik çeviri devre dışı."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"Çevirecek birşey yok."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Tüm hileleri silmek için beş kez sağa basın."

View File

@ -5193,10 +5193,6 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Режим Оповідача"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Верх"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"Історія та Обране"

View File

@ -7020,7 +7020,7 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_MODE,
"Show translation as an image overlay (Image Mode), as direct audio (Speech), text-to-speech (Narrator), or text overlay (Text)."
"Show translation as a text overlay (Image Mode), play as Text-To-Speech (Speech), or use a system narrator like NVDA (Narrator)."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_URL,
@ -7062,30 +7062,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TARGET_LANG,
"The language the service will translate to. 'Default' is English."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
"AI Service Auto-Polling Delay"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY,
"Minimum delay in ms between automatic calls. Lowers reactivity but increases CPU performance."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
"AI Service Text Position Override"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION,
"Override for the position of the overlay, when the service is in Text mode."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
"AI Service Text Padding (%)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING,
"Vertical padding to apply to the text overlay, when the service is in Text mode. More padding will push the text towards the center of the screen."
)
/* Settings > Accessibility */
@ -10693,26 +10669,6 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
"Narrator Mode"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
"Text Mode"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
"Text + Narrator"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
"Image + Narrator"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
"Bottom"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
"Top"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"History & Favorites"
@ -13776,22 +13732,6 @@ MSG_HASH( /* FIXME Should be MSG_ */
MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_ERROR,
"Core installation failed"
)
MSG_HASH(
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
"Video driver not supported for AI Service."
)
MSG_HASH(
MSG_AI_AUTO_MODE_ENABLED,
"Automatic translation enabled."
)
MSG_HASH(
MSG_AI_AUTO_MODE_DISABLED,
"Automatic translation disabled."
)
MSG_HASH(
MSG_AI_NOTHING_TO_TRANSLATE,
"Nothing to translate."
)
MSG_HASH(
MSG_CHEAT_DELETE_ALL_INSTRUCTIONS,
"Press right five times to delete all cheats."

View File

@ -269,9 +269,6 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_ai_service_target_lang, MENU_ENUM_S
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_ai_service_source_lang, MENU_ENUM_SUBLABEL_AI_SERVICE_SOURCE_LANG)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_ai_service_url, MENU_ENUM_SUBLABEL_AI_SERVICE_URL)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_ai_service_enable, MENU_ENUM_SUBLABEL_AI_SERVICE_ENABLE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_ai_service_poll_delay, MENU_ENUM_SUBLABEL_AI_SERVICE_POLL_DELAY)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_ai_service_text_position, MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_POSITION)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_ai_service_text_padding, MENU_ENUM_SUBLABEL_AI_SERVICE_TEXT_PADDING)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_power_management_settings_list, MENU_ENUM_SUBLABEL_POWER_MANAGEMENT_SETTINGS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_privacy_settings_list, MENU_ENUM_SUBLABEL_PRIVACY_SETTINGS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_midi_settings_list, MENU_ENUM_SUBLABEL_MIDI_SETTINGS)
@ -5131,15 +5128,6 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_AI_SERVICE_ENABLE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_ai_service_enable);
break;
case MENU_ENUM_LABEL_AI_SERVICE_POLL_DELAY:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_ai_service_poll_delay);
break;
case MENU_ENUM_LABEL_AI_SERVICE_TEXT_POSITION:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_ai_service_text_position);
break;
case MENU_ENUM_LABEL_AI_SERVICE_TEXT_PADDING:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_ai_service_text_padding);
break;
case MENU_ENUM_LABEL_AI_SERVICE_SETTINGS:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_ai_service_settings_list);
break;

View File

@ -7933,11 +7933,8 @@ unsigned menu_displaylist_build_list(
{MENU_ENUM_LABEL_AI_SERVICE_MODE, PARSE_ONLY_UINT, false},
{MENU_ENUM_LABEL_AI_SERVICE_URL, PARSE_ONLY_STRING, false},
{MENU_ENUM_LABEL_AI_SERVICE_PAUSE, PARSE_ONLY_BOOL, false},
{MENU_ENUM_LABEL_AI_SERVICE_POLL_DELAY, PARSE_ONLY_UINT, false},
{MENU_ENUM_LABEL_AI_SERVICE_SOURCE_LANG, PARSE_ONLY_UINT, false},
{MENU_ENUM_LABEL_AI_SERVICE_TARGET_LANG, PARSE_ONLY_UINT, false},
{MENU_ENUM_LABEL_AI_SERVICE_TEXT_POSITION, PARSE_ONLY_UINT, false},
{MENU_ENUM_LABEL_AI_SERVICE_TEXT_PADDING, PARSE_ONLY_UINT, false},
};
for (i = 0; i < ARRAY_SIZE(build_list); i++)
@ -7947,11 +7944,8 @@ unsigned menu_displaylist_build_list(
case MENU_ENUM_LABEL_AI_SERVICE_MODE:
case MENU_ENUM_LABEL_AI_SERVICE_URL:
case MENU_ENUM_LABEL_AI_SERVICE_PAUSE:
case MENU_ENUM_LABEL_AI_SERVICE_POLL_DELAY:
case MENU_ENUM_LABEL_AI_SERVICE_SOURCE_LANG:
case MENU_ENUM_LABEL_AI_SERVICE_TARGET_LANG:
case MENU_ENUM_LABEL_AI_SERVICE_TEXT_POSITION:
case MENU_ENUM_LABEL_AI_SERVICE_TEXT_PADDING:
if (ai_service_enable)
build_list[i].checked = true;
break;

View File

@ -7007,7 +7007,7 @@ static int generic_menu_iterate(
&& is_accessibility_enabled(
accessibility_enable,
access_st->enabled))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
menu->menu_state_msg, 10);
@ -7139,18 +7139,18 @@ static int generic_menu_iterate(
menu_st,
current_sublabel, sizeof(current_sublabel));
if (string_is_equal(current_sublabel, ""))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
menu->menu_state_msg, 10);
else
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
current_sublabel, 10);
}
else
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
menu->menu_state_msg, 10);
@ -7312,7 +7312,7 @@ static int generic_menu_iterate(
&& is_accessibility_enabled(
accessibility_enable,
access_st->enabled))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
"Closed dialog.", 10);
@ -7750,7 +7750,7 @@ int generic_menu_entry_action(
}
if (!string_is_empty(speak_string))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
speak_string, 10);
@ -7883,7 +7883,7 @@ bool menu_input_dialog_start_search(void)
if (is_accessibility_enabled(
accessibility_enable,
access_st->enabled))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
(char*)msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SEARCH), 10);
@ -7937,7 +7937,7 @@ bool menu_input_dialog_start(menu_input_ctx_line_t *line)
if (is_accessibility_enabled(
accessibility_enable,
access_st->enabled))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
"Keyboard input:", 10);

View File

@ -3028,42 +3028,6 @@ static void setting_get_string_representation_uint_ai_service_mode(
case 2:
enum_idx = MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE;
break;
case 3:
enum_idx = MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE;
break;
case 4:
enum_idx = MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE;
break;
case 5:
enum_idx = MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE;
break;
default:
break;
}
if (enum_idx != 0)
strlcpy(s, msg_hash_to_str(enum_idx), len);
}
static void setting_get_string_representation_uint_ai_service_text_position(
rarch_setting_t *setting,
char *s, size_t len)
{
enum msg_hash_enums enum_idx = MSG_UNKNOWN;
if (!setting)
return;
switch (*setting->value.target.unsigned_integer)
{
case 0:
enum_idx = MENU_ENUM_LABEL_VALUE_NONE;
break;
case 1:
enum_idx = MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM;
break;
case 2:
enum_idx = MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP;
break;
default:
break;
}
@ -20040,7 +20004,7 @@ static bool setting_append_list(
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_ai_service_mode;
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, 0, 5, 1, true, true);
menu_settings_list_current_add_range(list, list_info, 0, 2, 1, true, true);
CONFIG_STRING(
list, list_info,
@ -20123,49 +20087,6 @@ static bool setting_append_list(
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, TRANSLATION_LANG_DONT_CARE, (TRANSLATION_LANG_LAST-1), 1, true, true);
CONFIG_UINT(
list, list_info,
&settings->uints.ai_service_poll_delay,
MENU_ENUM_LABEL_AI_SERVICE_POLL_DELAY,
MENU_ENUM_LABEL_VALUE_AI_SERVICE_POLL_DELAY,
DEFAULT_AI_SERVICE_POLL_DELAY,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, 0, MAXIMUM_AI_SERVICE_POLL_DELAY, 50, true, true);
CONFIG_UINT(
list, list_info,
&settings->uints.ai_service_text_position,
MENU_ENUM_LABEL_AI_SERVICE_TEXT_POSITION,
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION,
DEFAULT_AI_SERVICE_TEXT_POSITION,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_ai_service_text_position;
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, 0, 2, 1, true, true);
CONFIG_UINT(
list, list_info,
&settings->uints.ai_service_text_padding,
MENU_ENUM_LABEL_AI_SERVICE_TEXT_PADDING,
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_PADDING,
DEFAULT_AI_SERVICE_TEXT_PADDING,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, 0, 20, 1, true, true);
END_SUB_GROUP(list, list_info, parent_group);
END_GROUP(list, list_info, parent_group);

View File

@ -572,10 +572,6 @@ enum msg_hash_enums
MSG_FAILED_TO_ENTER_GAMEMODE_LINUX,
MSG_VRR_RUNLOOP_ENABLED,
MSG_VRR_RUNLOOP_DISABLED,
MSG_AI_VIDEO_DRIVER_NOT_SUPPORTED,
MSG_AI_AUTO_MODE_ENABLED,
MSG_AI_AUTO_MODE_DISABLED,
MSG_AI_NOTHING_TO_TRANSLATE,
MSG_VIDEO_REFRESH_RATE_CHANGED,
MSG_IOS_TOUCH_MOUSE_ENABLED,
@ -2921,9 +2917,6 @@ enum msg_hash_enums
MENU_LABEL(AI_SERVICE_URL),
MENU_LABEL(AI_SERVICE_ENABLE),
MENU_LABEL(AI_SERVICE_PAUSE),
MENU_LABEL(AI_SERVICE_POLL_DELAY),
MENU_LABEL(AI_SERVICE_TEXT_POSITION),
MENU_LABEL(AI_SERVICE_TEXT_PADDING),
MSG_ACCESSIBILITY_STARTUP,
MSG_AI_SERVICE_STOPPED,
@ -3630,12 +3623,6 @@ enum msg_hash_enums
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_MODE,
MENU_ENUM_LABEL_VALUE_AI_SERVICE_SPEECH_MODE,
MENU_ENUM_LABEL_VALUE_AI_SERVICE_NARRATOR_MODE,
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_MODE,
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_NARRATOR_MODE,
MENU_ENUM_LABEL_VALUE_AI_SERVICE_IMAGE_NARRATOR_MODE,
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_TOP,
MENU_ENUM_LABEL_VALUE_AI_SERVICE_TEXT_POSITION_BOTTOM,
MENU_ENUM_LABEL_VALUE_NONE,
MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE,

View File

@ -3084,9 +3084,6 @@ bool command_event(enum event_command cmd, void *data)
#if defined(HAVE_ACCESSIBILITY) || defined(HAVE_TRANSLATE)
access_state_t *access_st = access_state_get_ptr();
#endif
#if defined(HAVE_TRANSLATE) && defined(HAVE_GFX_WIDGETS)
dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr();
#endif
#ifdef HAVE_MENU
struct menu_state *menu_st = menu_state_get_ptr();
#endif
@ -3103,12 +3100,12 @@ bool command_event(enum event_command cmd, void *data)
#ifdef HAVE_OVERLAY
input_overlay_unload();
#endif
#ifdef HAVE_TRANSLATE
translation_release(true);
#ifdef HAVE_GFX_WIDGETS
if (p_dispwidget->ai_service_overlay_state != 0)
#if defined(HAVE_TRANSLATE) && defined(HAVE_GFX_WIDGETS)
/* Because the overlay is a display widget,
* it's going to be written
* over the menu, so we unset it here. */
if (dispwidget_get_ptr()->ai_service_overlay_state != 0)
gfx_widgets_ai_service_overlay_unload();
#endif
#endif
break;
case CMD_EVENT_OVERLAY_INIT:
@ -3177,16 +3174,11 @@ bool command_event(enum event_command cmd, void *data)
if (is_accessibility_enabled(
accessibility_enable,
access_st->enabled))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
(char*)msg_hash_to_str(MSG_UNPAUSED), 10);
#endif
#ifdef HAVE_GFX_WIDGETS
if (p_dispwidget->ai_service_overlay_state != 0)
gfx_widgets_ai_service_overlay_unload();
#endif
translation_release(true);
command_event(CMD_EVENT_UNPAUSE, NULL);
}
else /* Pause on call */
@ -3205,24 +3197,18 @@ bool command_event(enum event_command cmd, void *data)
* Also, this mode is required for "auto" translation
* packages, since you don't want to pause for that.
*/
if (access_st->ai_service_auto != 0)
if (access_st->ai_service_auto == 2)
{
/* Auto mode was turned on, but we pressed the
* toggle button, so turn it off now. */
translation_release(true);
#ifdef HAVE_GFX_WIDGETS
if (p_dispwidget->ai_service_overlay_state != 0)
gfx_widgets_ai_service_overlay_unload();
access_st->ai_service_auto = 0;
#ifdef HAVE_MENU_WIDGETS
gfx_widgets_ai_service_overlay_unload();
#endif
}
else
{
#ifdef HAVE_GFX_WIDGETS
if (p_dispwidget->ai_service_overlay_state != 0)
gfx_widgets_ai_service_overlay_unload();
else
#endif
command_event(CMD_EVENT_AI_SERVICE_CALL, NULL);
command_event(CMD_EVENT_AI_SERVICE_CALL, NULL);
}
}
#endif
@ -4640,12 +4626,12 @@ bool command_event(enum event_command cmd, void *data)
access_st->enabled))
{
if (paused)
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
(char*)msg_hash_to_str(MSG_PAUSED), 10);
else
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
(char*)msg_hash_to_str(MSG_UNPAUSED), 10);
@ -5402,7 +5388,7 @@ bool command_event(enum event_command cmd, void *data)
if (is_accessibility_enabled(
accessibility_enable,
access_st->enabled))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
(char*)msg_hash_to_str(MSG_AI_SERVICE_STOPPED),
@ -5417,7 +5403,7 @@ bool command_event(enum event_command cmd, void *data)
access_st->enabled)
&& (ai_service_mode == 2)
&& is_narrator_running(accessibility_enable))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
(char*)msg_hash_to_str(MSG_AI_SERVICE_STOPPED),
@ -5428,7 +5414,9 @@ bool command_event(enum event_command cmd, void *data)
bool paused = (runloop_st->flags & RUNLOOP_FLAG_PAUSED) ? true : false;
if (data)
paused = *((bool*)data);
if ( (access_st->ai_service_auto == 0)
&& !settings->bools.ai_service_pause)
access_st->ai_service_auto = 1;
run_translation_service(settings, paused);
}
#endif
@ -7476,7 +7464,7 @@ bool retroarch_main_init(int argc, char *argv[])
if (is_accessibility_enabled(
accessibility_enable,
access_st->enabled))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
(char*)msg_hash_to_str(MSG_ACCESSIBILITY_STARTUP),
@ -8193,9 +8181,6 @@ bool retroarch_main_quit(void)
video_driver_state_t*video_st = video_state_get_ptr();
settings_t *settings = config_get_ptr();
bool config_save_on_exit = settings->bools.config_save_on_exit;
#ifdef HAVE_ACCESSIBILITY
access_state_t *access_st = access_state_get_ptr();
#endif
/* Restore video driver before saving */
video_driver_restore_cached(settings);
@ -8288,20 +8273,6 @@ bool retroarch_main_quit(void)
retroarch_menu_running_finished(true);
#endif
#ifdef HAVE_TRANSLATE
translation_release(false);
#endif
#ifdef HAVE_ACCESSIBILITY
#ifdef HAVE_THREADS
if (access_st->image_lock)
{
slock_free(access_st->image_lock);
access_st->image_lock = NULL;
}
#endif
#endif
return true;
}
@ -8426,7 +8397,7 @@ void retroarch_favorites_deinit(void)
}
#ifdef HAVE_ACCESSIBILITY
bool navigation_say(
bool accessibility_speak_priority(
bool accessibility_enable,
unsigned accessibility_narrator_speech_speed,
const char* speak_text, int priority)
@ -8436,48 +8407,29 @@ bool navigation_say(
accessibility_enable,
access_st->enabled))
{
const char *voice = get_user_language_iso639_1(false);
bool native_narrator = accessibility_speak_priority(accessibility_narrator_speech_speed,
speak_text, priority, voice);
if (!native_narrator)
{
/*
* The following method is a fallback for other platforms to use the
* AI Service url to do the TTS. However, since the playback is done
* via the audio mixer, which only processes the audio while the
* core is running, this playback method won't work. When the audio
* mixer can handle playing streams while the core is paused, then
* we can use this.
*/
frontend_ctx_driver_t *frontend =
frontend_state_get_ptr()->current_frontend_ctx;
RARCH_LOG("Spoke: %s\n", speak_text);
if (frontend && frontend->accessibility_speak)
return frontend->accessibility_speak(accessibility_narrator_speech_speed, speak_text,
priority);
/* The following method is a fallback for other platforms to use the
AI Service url to do the TTS. However, since the playback is done
via the audio mixer, which only processes the audio while the
core is running, this playback method won't work. When the audio
mixer can handle playing streams while the core is paused, then
we can use this. */
#if 0
#if defined(HAVE_NETWORKING)
return accessibility_speak_ai_service(speak_text, voice, priority);
#endif
#endif
}
}
return true;
}
bool accessibility_speak_priority(
unsigned accessibility_narrator_speech_speed,
const char *speak_text,
int priority,
const char *voice)
{
frontend_ctx_driver_t *frontend =
frontend_state_get_ptr()->current_frontend_ctx;
RARCH_LOG("Spoke: %s\n", speak_text);
if (frontend && frontend->accessibility_speak)
return frontend->accessibility_speak(accessibility_narrator_speech_speed,
speak_text, priority, voice);
RARCH_LOG("Platform not supported for accessibility.\n");
return false;
}
#endif

View File

@ -5309,7 +5309,7 @@ void runloop_msg_queue_push(const char *msg,
if (is_accessibility_enabled(
accessibility_enable,
access_st->enabled))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
(char*) msg, 0);
@ -7334,7 +7334,7 @@ void runloop_task_msg_queue_push(
if (is_accessibility_enabled(
accessibility_enable,
access_st->enabled))
navigation_say(
accessibility_speak_priority(
accessibility_enable,
accessibility_narrator_speech_speed,
(char*)msg, 0);

File diff suppressed because it is too large Load Diff