mirror of
https://github.com/libretro/RetroArch.git
synced 2024-11-22 23:49:50 +00:00
Revert of AI service changes (#16428)
This commit is contained in:
parent
6671916c78
commit
26a824caff
127
accessibility.h
127
accessibility.h
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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"};
|
||||
|
@ -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"};
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
"المحفوظات والمفضلة"
|
||||
|
@ -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,
|
||||
"Гісторыя ды ўпадабанае"
|
||||
|
@ -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,
|
||||
"按右键五次删除所有金手指。"
|
||||
|
@ -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,
|
||||
"歷史和我的最愛"
|
||||
|
@ -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."
|
||||
|
@ -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."
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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."
|
||||
|
@ -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."
|
||||
|
@ -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."
|
||||
|
@ -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."
|
||||
|
@ -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."
|
||||
|
@ -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 回押してください。"
|
||||
|
@ -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,
|
||||
"모든 치트를 삭제하려면 오른쪽을 다섯 번 입력하십시오."
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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."
|
||||
|
@ -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,
|
||||
"Нажмите вправо пять раз для удаления всех чит-кодов."
|
||||
|
@ -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é"
|
||||
|
@ -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."
|
||||
|
@ -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."
|
||||
|
@ -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,
|
||||
"Історія та Обране"
|
||||
|
@ -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."
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
13
msg_hash.h
13
msg_hash.h
@ -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,
|
||||
|
||||
|
116
retroarch.c
116
retroarch.c
@ -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
|
||||
|
@ -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
Loading…
Reference in New Issue
Block a user