1 /* RetroArch - A frontend for libretro.
2 * Copyright (C) 2011-2017 - Daniel De Matteis
3 * Copyright (C) 2016-2019 - Brad Parker
4 *
5 * RetroArch is free software: you can redistribute it and/or modify it under the terms
6 * of the GNU General Public License as published by the Free Software Found-
7 * ation, either version 3 of the License, or (at your option) any later version.
8 *
9 * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
10 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along with RetroArch.
14 * If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include <stdio.h>
18 #include <stdint.h>
19 #include <stddef.h>
20
21 #include <compat/strl.h>
22 #include <string/stdstring.h>
23
24 #include "../msg_hash.h"
25 #include "../configuration.h"
26 #include "../verbosity.h"
27
28 #if defined(_MSC_VER) && !defined(_XBOX) && (_MSC_VER >= 1500 && _MSC_VER < 1900)
29 #if (_MSC_VER >= 1700)
30 /* https://support.microsoft.com/en-us/kb/980263 */
31 #pragma execution_character_set("utf-8")
32 #endif
33 #pragma warning(disable:4566)
34 #endif
35
msg_hash_get_help_vn_enum(enum msg_hash_enums msg,char * s,size_t len)36 int msg_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len)
37 {
38 settings_t *settings = config_get_ptr();
39
40 if (msg <= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END &&
41 msg >= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN)
42 {
43 unsigned idx = msg - MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN;
44
45 switch (idx)
46 {
47 case RARCH_FAST_FORWARD_KEY:
48 snprintf(s, len,
49 "Chọn giữa tốc độ nhanh và \n"
50 "bình thường."
51 );
52 break;
53 case RARCH_FAST_FORWARD_HOLD_KEY:
54 snprintf(s, len,
55 "Nhấn nút để xem nhanh. \n"
56 " \n"
57 "Thả nút để ngừng xem nhanh."
58 );
59 break;
60 case RARCH_SLOWMOTION_HOLD_KEY:
61 snprintf(s, len,
62 "Nhấn để xem chậm.");
63 break;
64 case RARCH_PAUSE_TOGGLE:
65 snprintf(s, len,
66 "Bật/tắt chức năng tạm dừng.");
67 break;
68 case RARCH_FRAMEADVANCE:
69 snprintf(s, len,
70 "Xem khung kế tiếp khi đã tạm dừng.");
71 break;
72 case RARCH_SHADER_NEXT:
73 snprintf(s, len,
74 "Áp dụng shader kế tiếp trong thư mục.");
75 break;
76 case RARCH_SHADER_PREV:
77 snprintf(s, len,
78 "Áp dụng shader trước trong thư mục.");
79 break;
80 case RARCH_CHEAT_INDEX_PLUS:
81 case RARCH_CHEAT_INDEX_MINUS:
82 case RARCH_CHEAT_TOGGLE:
83 snprintf(s, len,
84 "Gian lận.");
85 break;
86 case RARCH_RESET:
87 snprintf(s, len,
88 "Đặt lại nội dung.");
89 break;
90 case RARCH_SCREENSHOT:
91 snprintf(s, len,
92 "Chụp ảnh màn hình.");
93 break;
94 case RARCH_MUTE:
95 snprintf(s, len,
96 "Tắt/Bật âm thanh.");
97 break;
98 case RARCH_OSK:
99 snprintf(s, len,
100 "Bật/tắt bàn phím trên màn hình.");
101 break;
102 case RARCH_ENABLE_HOTKEY:
103 snprintf(s, len,
104 "Enable other hotkeys. \n"
105 " \n"
106 "If this hotkey is bound to either\n"
107 "a keyboard, joybutton or joyaxis, \n"
108 "all other hotkeys will be enabled only \n"
109 "if this one is held at the same time. \n"
110 " \n"
111 "This is useful for RETRO_KEYBOARD centric \n"
112 "implementations which query a large area of \n"
113 "the keyboard, where it is not desirable that \n"
114 "hotkeys get in the way. \n"
115 " \n"
116 "Alternatively, all hotkeys for keyboard \n"
117 "could be disabled by the user.");
118 break;
119 case RARCH_VOLUME_UP:
120 snprintf(s, len,
121 "Tăng âm lượng.");
122 break;
123 case RARCH_VOLUME_DOWN:
124 snprintf(s, len,
125 "Giảm âm lượng.");
126 break;
127 case RARCH_OVERLAY_NEXT:
128 snprintf(s, len,
129 "Đổi qua overlay kế tiếp.");
130 break;
131 case RARCH_DISK_EJECT_TOGGLE:
132 snprintf(s, len,
133 "Bật/tắt nhả đĩa. \n"
134 " \n"
135 "Được sử dụng cho nội dung có nhiều đĩa. ");
136 break;
137 case RARCH_DISK_NEXT:
138 case RARCH_DISK_PREV:
139 snprintf(s, len,
140 "Xem qua các đĩa game. Sử dụng sau khi nhả đĩa. \n"
141 " \n"
142 "Bấm nút 'Bật/tắt nhả đĩa' để chọn đĩa.");
143 break;
144 case RARCH_GRAB_MOUSE_TOGGLE:
145 snprintf(s, len,
146 "Bật/tắt mouse grab. \n"
147 " \n"
148 "When mouse is grabbed, RetroArch hides the \n"
149 "mouse, and keeps the mouse pointer inside \n"
150 "the window to allow relative mouse input to \n"
151 "work better.");
152 break;
153 case RARCH_MENU_TOGGLE:
154 snprintf(s, len, "Bật/tắt menu.");
155 break;
156 case RARCH_LOAD_STATE_KEY:
157 snprintf(s, len,
158 "Tải state.");
159 break;
160 case RARCH_FULLSCREEN_TOGGLE_KEY:
161 snprintf(s, len,
162 "Bật/tắt chế độ toàn màn hình.");
163 break;
164 case RARCH_QUIT_KEY:
165 snprintf(s, len,
166 "Nút để an toàn thoát RetroArch. \n"
167 " \n"
168 "Killing it in any hard way (SIGKILL, etc.) will \n"
169 "terminate RetroArch without saving RAM, etc."
170 #ifdef __unix__
171 "\nOn Unix-likes, SIGINT/SIGTERM allows a clean \n"
172 "deinitialization."
173 #endif
174 "");
175 break;
176 case RARCH_STATE_SLOT_PLUS:
177 case RARCH_STATE_SLOT_MINUS:
178 snprintf(s, len,
179 "State slots. \n"
180 " \n"
181 "With slot set to 0, save state name is \n"
182 "*.state (or whatever defined on commandline). \n"
183 " \n"
184 "When slot is not 0, path will be <path><d>, \n"
185 "where <d> is slot number.");
186 break;
187 case RARCH_SAVE_STATE_KEY:
188 snprintf(s, len,
189 "Lưu state.");
190 break;
191 case RARCH_REWIND:
192 snprintf(s, len,
193 "Giữ nút đễ quay lại. \n"
194 " \n"
195 "Cần phải bật chức năng quay lại.");
196 break;
197 case RARCH_BSV_RECORD_TOGGLE:
198 snprintf(s, len,
199 "Bật/tắt ghi chép video.");
200 break;
201 default:
202 if (string_is_empty(s))
203 strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE), len);
204 break;
205 }
206
207 return 0;
208 }
209
210 switch (msg)
211 {
212 case MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS:
213 snprintf(s, len, "Chi tiết đăng nhập cho tài khoản \n"
214 "Retro Achievements của bạn. \n"
215 " \n"
216 "Truy cập retroachievements.org đễ \n"
217 "đăng ký tài khoản miễn phí. \n"
218 " \n"
219 "Sau khi đăng ký, bạn phải \n"
220 "cung cấp tên tài khoản và mật mã vào \n"
221 "RetroArch.");
222 break;
223 case MENU_ENUM_LABEL_CHEEVOS_USERNAME:
224 snprintf(s, len, "Tên tài khoản của Retro Achievements.");
225 break;
226 case MENU_ENUM_LABEL_CHEEVOS_PASSWORD:
227 snprintf(s, len, "Mật mã của Retro Achievements tài khoản.");
228 break;
229 case MENU_ENUM_LABEL_USER_LANGUAGE:
230 snprintf(s, len, "Localizes the menu and all onscreen messages \n"
231 "according to the language you have selected \n"
232 "here. \n"
233 " \n"
234 "Requires a restart for the changes \n"
235 "to take effect. \n"
236 " \n"
237 "Note: not all languages might be currently \n"
238 "implemented. \n"
239 " \n"
240 "In case a language is not implemented, \n"
241 "we fallback to English.");
242 break;
243 case MENU_ENUM_LABEL_VIDEO_FONT_PATH:
244 snprintf(s, len, "Change the font that is used \n"
245 "for the Onscreen Display text.");
246 break;
247 case MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS:
248 snprintf(s, len, "Automatically tải content-specific core options.");
249 break;
250 case MENU_ENUM_LABEL_AUTO_OVERRIDES_ENABLE:
251 snprintf(s, len, "Automatically tải override configurations.");
252 break;
253 case MENU_ENUM_LABEL_AUTO_REMAPS_ENABLE:
254 snprintf(s, len, "Automatically tải input remapping files.");
255 break;
256 case MENU_ENUM_LABEL_SORT_SAVESTATES_ENABLE:
257 snprintf(s, len, "Sort save states in folders \n"
258 "named after the libretro core used.");
259 break;
260 case MENU_ENUM_LABEL_SORT_SAVEFILES_ENABLE:
261 snprintf(s, len, "Sort save files in folders \n"
262 "named after the libretro core used.");
263 break;
264 case MENU_ENUM_LABEL_RESUME_CONTENT:
265 snprintf(s, len, "Exits from the menu and returns back \n"
266 "to the content.");
267 break;
268 case MENU_ENUM_LABEL_RESTART_CONTENT:
269 snprintf(s, len, "Restarts the content from the beginning.");
270 break;
271 case MENU_ENUM_LABEL_CLOSE_CONTENT:
272 snprintf(s, len, "Closes the content and unloads it from \n"
273 "memory.");
274 break;
275 case MENU_ENUM_LABEL_UNDO_LOAD_STATE:
276 snprintf(s, len, "If a state was loaded, content will \n"
277 "go back to the state prior to loading.");
278 break;
279 case MENU_ENUM_LABEL_UNDO_SAVE_STATE:
280 snprintf(s, len, "If a state was overwritten, it will \n"
281 "roll back to the previous save state.");
282 break;
283 case MENU_ENUM_LABEL_TAKE_SCREENSHOT:
284 snprintf(s, len, "Create a screenshot. \n"
285 " \n"
286 "The screenshot will be stored inside the \n"
287 "Screenshot Thư mục.");
288 break;
289 case MENU_ENUM_LABEL_RUN:
290 snprintf(s, len, "Start the content.");
291 break;
292 case MENU_ENUM_LABEL_INFORMATION:
293 snprintf(s, len, "Show additional metadata information \n"
294 "about the content.");
295 break;
296 case MENU_ENUM_LABEL_FILE_BROWSER_CONFIG:
297 snprintf(s, len, "Configuration file.");
298 break;
299 case MENU_ENUM_LABEL_FILE_BROWSER_COMPRESSED_ARCHIVE:
300 snprintf(s, len, "Compressed archive file.");
301 break;
302 case MENU_ENUM_LABEL_FILE_BROWSER_RECORD_CONFIG:
303 snprintf(s, len, "Recording configuration file.");
304 break;
305 case MENU_ENUM_LABEL_FILE_BROWSER_CURSOR:
306 snprintf(s, len, "Database cursor file.");
307 break;
308 case MENU_ENUM_LABEL_FILE_CONFIG:
309 snprintf(s, len, "Configuration file.");
310 break;
311 case MENU_ENUM_LABEL_SCAN_THIS_DIRECTORY:
312 snprintf(s, len,
313 "Select this to scan the current thư mục \n"
314 "for content.");
315 break;
316 case MENU_ENUM_LABEL_USE_THIS_DIRECTORY:
317 snprintf(s, len,
318 "Select this to set this as the thư mục.");
319 break;
320 case MENU_ENUM_LABEL_CONTENT_DATABASE_DIRECTORY:
321 snprintf(s, len,
322 "Content Database thư mục. \n"
323 " \n"
324 "Path to content database \n"
325 "thư mục.");
326 break;
327 case MENU_ENUM_LABEL_THUMBNAILS_DIRECTORY:
328 snprintf(s, len,
329 "Thumbnails thư mục. \n"
330 " \n"
331 "To store thumbnail files.");
332 break;
333 case MENU_ENUM_LABEL_LIBRETRO_INFO_PATH:
334 snprintf(s, len,
335 "Core Info thư mục. \n"
336 " \n"
337 "A thư mục for where to search \n"
338 "for libretro core information.");
339 break;
340 case MENU_ENUM_LABEL_PLAYLIST_DIRECTORY:
341 snprintf(s, len,
342 "Playlist thư mục. \n"
343 " \n"
344 "Save all playlist files to this \n"
345 "thư mục.");
346 break;
347 case MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN:
348 snprintf(s, len,
349 "Some libretro cores might have \n"
350 "a shutdown feature. \n"
351 " \n"
352 "If this option is left disabled, \n"
353 "selecting the shutdown procedure \n"
354 "would trigger RetroArch being shut \n"
355 "down. \n"
356 " \n"
357 "Enabling this option will load a \n"
358 "dummy core instead so that we remain \n"
359 "inside the menu and RetroArch won't \n"
360 "shutdown.");
361 break;
362 case MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE:
363 snprintf(s, len,
364 "Some cores might need \n"
365 "firmware or bios files. \n"
366 " \n"
367 "If this option is disabled, \n"
368 "it will try to load even if such \n"
369 "firmware is missing. \n"
370 "down. \n");
371 break;
372 case MENU_ENUM_LABEL_PARENT_DIRECTORY:
373 snprintf(s, len,
374 "Go back to the parent thư mục.");
375 break;
376 case MENU_ENUM_LABEL_FILE_BROWSER_SHADER_PRESET:
377 snprintf(s, len,
378 "Shader preset file.");
379 break;
380 case MENU_ENUM_LABEL_FILE_BROWSER_SHADER:
381 snprintf(s, len,
382 "Shader file.");
383 break;
384 case MENU_ENUM_LABEL_FILE_BROWSER_REMAP:
385 snprintf(s, len,
386 "Remap controls file.");
387 break;
388 case MENU_ENUM_LABEL_FILE_BROWSER_CHEAT:
389 snprintf(s, len,
390 "Cheat file.");
391 break;
392 case MENU_ENUM_LABEL_FILE_BROWSER_OVERLAY:
393 snprintf(s, len,
394 "Overlay file.");
395 break;
396 case MENU_ENUM_LABEL_FILE_BROWSER_RDB:
397 snprintf(s, len,
398 "Database file.");
399 break;
400 case MENU_ENUM_LABEL_FILE_BROWSER_FONT:
401 snprintf(s, len,
402 "TrueType font file.");
403 break;
404 case MENU_ENUM_LABEL_FILE_BROWSER_PLAIN_FILE:
405 snprintf(s, len,
406 "Plain file.");
407 break;
408 case MENU_ENUM_LABEL_FILE_BROWSER_MOVIE_OPEN:
409 snprintf(s, len,
410 "Video. \n"
411 " \n"
412 "Select it to open this file with the \n"
413 "video player.");
414 break;
415 case MENU_ENUM_LABEL_FILE_BROWSER_MUSIC_OPEN:
416 snprintf(s, len,
417 "Music. \n"
418 " \n"
419 "Select it to open this file with the \n"
420 "music player.");
421 break;
422 case MENU_ENUM_LABEL_FILE_BROWSER_IMAGE:
423 snprintf(s, len,
424 "Image file.");
425 break;
426 case MENU_ENUM_LABEL_FILE_BROWSER_IMAGE_OPEN_WITH_VIEWER:
427 snprintf(s, len,
428 "Image. \n"
429 " \n"
430 "Select it to open this file with the \n"
431 "image viewer.");
432 break;
433 case MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION:
434 snprintf(s, len,
435 "Libretro core. \n"
436 " \n"
437 "Selecting this will associate this core \n"
438 "to the game.");
439 break;
440 case MENU_ENUM_LABEL_FILE_BROWSER_CORE:
441 snprintf(s, len,
442 "Libretro core. \n"
443 " \n"
444 "Select this file to have RetroArch load this core.");
445 break;
446 case MENU_ENUM_LABEL_FILE_BROWSER_DIRECTORY:
447 snprintf(s, len,
448 "thư mục. \n"
449 " \n"
450 "Select it to open this thư mục.");
451 break;
452 case MENU_ENUM_LABEL_CACHE_DIRECTORY:
453 snprintf(s, len,
454 "Cache thư mục. \n"
455 " \n"
456 "Content decompressed by RetroArch will be \n"
457 "temporarily extracted to this thư mục.");
458 break;
459 case MENU_ENUM_LABEL_HISTORY_LIST_ENABLE:
460 snprintf(s, len,
461 "If enabled, every content loaded \n"
462 "in RetroArch will be automatically \n"
463 "added to the recent history list.");
464 break;
465 case MENU_ENUM_LABEL_RGUI_BROWSER_DIRECTORY:
466 snprintf(s, len,
467 "File Browser thư mục. \n"
468 " \n"
469 "Sets start thư mục for menu file browser.");
470 break;
471 case MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR:
472 snprintf(s, len,
473 "Influence how input polling is done inside \n"
474 "RetroArch. \n"
475 " \n"
476 "Early - Input polling is performed before \n"
477 "the frame is processed. \n"
478 "Normal - Input polling is performed when \n"
479 "polling is requested. \n"
480 "Late - Input polling is performed on \n"
481 "first input state request per frame.\n"
482 " \n"
483 "Setting it to 'Early' or 'Late' can result \n"
484 "in less latency, \n"
485 "depending on your configuration.\n\n"
486 "When netplay is enabled, the default polling \n"
487 "behavior (Normal) will be used, \n"
488 "regardless of the value set here."
489 );
490 break;
491 case MENU_ENUM_LABEL_INPUT_DESCRIPTOR_HIDE_UNBOUND:
492 snprintf(s, len,
493 "Hide input descriptors that were not set \n"
494 "by the core.");
495 break;
496 case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE:
497 snprintf(s, len,
498 "Video refresh rate of your monitor. \n"
499 "Used to calculate a suitable audio input rate.");
500 break;
501 case MENU_ENUM_LABEL_VIDEO_FORCE_SRGB_DISABLE:
502 snprintf(s, len,
503 "Forcibly disable sRGB FBO support. Some Intel \n"
504 "OpenGL drivers on Windows have video problems \n"
505 "with sRGB FBO support enabled.");
506 break;
507 case MENU_ENUM_LABEL_AUDIO_ENABLE:
508 snprintf(s, len,
509 "Enable audio output.");
510 break;
511 case MENU_ENUM_LABEL_AUDIO_SYNC:
512 snprintf(s, len,
513 "Synchronize audio (recommended).");
514 break;
515 case MENU_ENUM_LABEL_AUDIO_LATENCY:
516 snprintf(s, len,
517 "Desired audio latency in milliseconds. \n"
518 "Might not be honored if the audio driver \n"
519 "can't provide given latency.");
520 break;
521 case MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE:
522 snprintf(s, len,
523 "Allow cores to set rotation. If false, \n"
524 "rotation requests are honored, but ignored.\n\n"
525 "Used for setups where one manually rotates \n"
526 "the monitor.");
527 break;
528 case MENU_ENUM_LABEL_INPUT_DESCRIPTOR_LABEL_SHOW:
529 snprintf(s, len,
530 "Show the input descriptors set by the core \n"
531 "instead of the default ones.");
532 break;
533 case MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE:
534 snprintf(s, len,
535 "Number of entries that will be kept in \n"
536 "content history playlist.");
537 break;
538 case MENU_ENUM_LABEL_VIDEO_WINDOWED_FULLSCREEN:
539 snprintf(s, len,
540 "To use windowed mode or not when going \n"
541 "fullscreen.");
542 break;
543 case MENU_ENUM_LABEL_VIDEO_FONT_SIZE:
544 snprintf(s, len,
545 "Font size for on-screen messages.");
546 break;
547 case MENU_ENUM_LABEL_SAVESTATE_AUTO_INDEX:
548 snprintf(s, len,
549 "Automatically increment slot index on each save, \n"
550 "generating multiple savestate files. \n"
551 "When the content is loaded, state slot will be \n"
552 "set to the highest existing value (last savestate).");
553 break;
554 case MENU_ENUM_LABEL_FPS_SHOW:
555 snprintf(s, len,
556 "Enables displaying the current frames \n"
557 "per second.");
558 break;
559 case MENU_ENUM_LABEL_VIDEO_FONT_ENABLE:
560 snprintf(s, len,
561 "Show and/or hide onscreen messages.");
562 break;
563 case MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_X:
564 case MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_Y:
565 snprintf(s, len,
566 "Offset for where messages will be placed \n"
567 "onscreen. Values are in range [0.0, 1.0].");
568 break;
569 case MENU_ENUM_LABEL_INPUT_OVERLAY_ENABLE:
570 snprintf(s, len,
571 "Enable or disable the current overlay.");
572 break;
573 case MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU:
574 snprintf(s, len,
575 "Hide the current overlay from appearing \n"
576 "inside the menu.");
577 break;
578 case MENU_ENUM_LABEL_OVERLAY_PRESET:
579 snprintf(s, len,
580 "Path to input overlay.");
581 break;
582 case MENU_ENUM_LABEL_OVERLAY_OPACITY:
583 snprintf(s, len,
584 "Overlay opacity.");
585 break;
586 case MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT:
587 snprintf(s, len,
588 "Input bind timer timeout (in seconds). \n"
589 "Amount of seconds to wait until proceeding \n"
590 "to the next bind.");
591 break;
592 case MENU_ENUM_LABEL_INPUT_BIND_HOLD:
593 snprintf(s, len,
594 "Input bind hold time (in seconds). \n"
595 "Amount of seconds to hold an input to bind it.");
596 break;
597 case MENU_ENUM_LABEL_OVERLAY_SCALE:
598 snprintf(s, len,
599 "Overlay scale.");
600 break;
601 case MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE:
602 snprintf(s, len,
603 "Audio output samplerate.");
604 break;
605 case MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT:
606 snprintf(s, len,
607 "Set to true if hardware-rendered cores \n"
608 "should get their private context. \n"
609 "Avoids having to assume hardware state changes \n"
610 "inbetween frames."
611 );
612 break;
613 case MENU_ENUM_LABEL_CORE_LIST:
614 snprintf(s, len,
615 "Tải Core. \n"
616 " \n"
617 "Browse for a libretro core \n"
618 "implementation. Where the browser \n"
619 "starts depends on your Core thư mục \n"
620 "path. If blank, it will start in root. \n"
621 " \n"
622 "If Core thư mục is a thư mục, the menu \n"
623 "will use that as top folder. If Core \n"
624 "thư mục is a full path, it will start \n"
625 "in the folder where the file is.");
626 break;
627 case MENU_ENUM_LABEL_VALUE_MENU_ENUM_CONTROLS_PROLOG:
628 snprintf(s, len,
629 "You can use the following controls below \n"
630 "on either your gamepad or keyboard in order\n"
631 "to control the menu: \n"
632 " \n"
633 );
634 break;
635 case MENU_ENUM_LABEL_WELCOME_TO_RETROARCH:
636 snprintf(s, len,
637 "Welcome to RetroArch\n"
638 );
639 break;
640 case MENU_ENUM_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING_DESC:
641 {
642 /* Work around C89 limitations */
643 char u[501];
644 const char * t =
645 "RetroArch relies on an unique form of\n"
646 "audio/video synchronization where it needs to be\n"
647 "calibrated against the refresh rate of your\n"
648 "display for best performance results.\n"
649 " \n"
650 "If you experience any audio crackling or video\n"
651 "tearing, usually it means that you need to\n"
652 "calibrate the settings. Some choices below:\n"
653 " \n";
654 snprintf(u, sizeof(u), /* can't inline this due to the printf arguments */
655 "a) Go to '%s' -> '%s', and enable\n"
656 "'Threaded Video'. Refresh rate will not matter\n"
657 "in this mode, framerate will be higher,\n"
658 "but video might be less smooth.\n"
659 "b) Go to '%s' -> '%s', and look at\n"
660 "'%s'. Let it run for\n"
661 "2048 frames, then press 'OK'.",
662 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SETTINGS),
663 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS),
664 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SETTINGS),
665 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS),
666 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO));
667 strlcpy(s, t, len);
668 strlcat(s, u, len);
669 }
670 break;
671 case MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT_DESC:
672 snprintf(s, len,
673 "To scan for content, go to '%s' and\n"
674 "select either '%s' or %s'.\n"
675 "\n"
676 "Files will be compared to database entries.\n"
677 "If there is a match, it will add an entry\n"
678 "to a playlist.\n"
679 "\n"
680 "You can then easily access this content by\n"
681 "going to '%s' ->\n"
682 "'%s'\n"
683 "instead of having to go through the\n"
684 "file browser every time.\n"
685 "\n"
686 "NOTE: Content for some cores might still not be\n"
687 "scannable.",
688 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST),
689 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY),
690 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_FILE),
691 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST),
692 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB)
693 );
694 break;
695 case MENU_ENUM_LABEL_VALUE_EXTRACTING_PLEASE_WAIT:
696 snprintf(s, len,
697 "Welcome to RetroArch\n"
698 "\n"
699 "Extracting assets, please wait.\n"
700 "This might take a while...\n"
701 );
702 break;
703 case MENU_ENUM_LABEL_INPUT_DRIVER:
704 {
705 const char *lbl = settings ? settings->arrays.input_driver : NULL;
706
707 if (string_is_equal(lbl, msg_hash_to_str(MENU_ENUM_LABEL_INPUT_DRIVER_UDEV)))
708 snprintf(s, len,
709 "udev Input driver. \n"
710 " \n"
711 "This driver can run without X. \n"
712 " \n"
713 "It uses the recent evdev joypad API \n"
714 "for joystick support. It supports \n"
715 "hotplugging and force feedback (if \n"
716 "supported by device). \n"
717 " \n"
718 "The driver reads evdev events for keyboard \n"
719 "support. It also supports keyboard callback, \n"
720 "mice and touchpads. \n"
721 " \n"
722 "By default in most distros, /dev/input nodes \n"
723 "are root-only (mode 600). You can set up a udev \n"
724 "rule which makes these accessible to non-root."
725 );
726 else if (string_is_equal(lbl, msg_hash_to_str(MENU_ENUM_LABEL_INPUT_DRIVER_LINUXRAW)))
727 strlcpy(s,
728 "linuxraw Input driver. \n"
729 " \n"
730 "This driver requires an active TTY. Keyboard \n"
731 "events are read directly from the TTY which \n"
732 "makes it simpler, but not as flexible as udev. \n" "Mice, etc, are not supported at all. \n"
733 " \n"
734 "This driver uses the older joystick API \n"
735 "(/dev/input/js*).", len);
736 else
737 strlcpy(s,
738 "Input driver.\n"
739 " \n"
740 "Depending on video driver, it might \n"
741 "force a different input driver.", len);
742 }
743 break;
744 case MENU_ENUM_LABEL_LOAD_CONTENT_LIST:
745 snprintf(s, len,
746 "Tải Content. \n"
747 "Browse for content. \n"
748 " \n"
749 "To tải content, you need a \n"
750 "'Core' to use, and a content file. \n"
751 " \n"
752 "To control where the menu starts \n"
753 "to browse for content, set \n"
754 "'File Browser thư mục'. \n"
755 "If not set, it will start in root. \n"
756 " \n"
757 "The browser will filter out \n"
758 "extensions for the last core set \n"
759 "in 'Tải Core', and use that core \n"
760 "when content is loaded."
761 );
762 break;
763 case MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY:
764 snprintf(s, len,
765 "Loading content from history. \n"
766 " \n"
767 "As content is loaded, content and libretro \n"
768 "core combinations are saved to history. \n"
769 " \n"
770 "The history is saved to a file in the same \n"
771 "thư mục as the RetroArch config file. If \n"
772 "no config file was loaded in startup, history \n"
773 "will not be saved or loaded, and will not exist \n"
774 "in the main menu."
775 );
776 break;
777 case MENU_ENUM_LABEL_VIDEO_DRIVER:
778 {
779 const char *video_driver = settings->arrays.video_driver;
780
781 snprintf(s, len,
782 "Current Video driver.");
783
784 if (string_is_equal(video_driver, "gl"))
785 {
786 snprintf(s, len,
787 "OpenGL Video driver. \n"
788 " \n"
789 "This driver allows libretro GL cores to \n"
790 "be used in addition to software-rendered \n"
791 "core implementations.\n"
792 " \n"
793 "Performance for software-rendered and \n"
794 "libretro GL core implementations is \n"
795 "dependent on your graphics card's \n"
796 "underlying GL driver).");
797 }
798 else if (string_is_equal(video_driver, "sdl2"))
799 {
800 snprintf(s, len,
801 "SDL 2 Video driver.\n"
802 " \n"
803 "This is an SDL 2 software-rendered video \n"
804 "driver.\n"
805 " \n"
806 "Performance for software-rendered libretro \n"
807 "core implementations is dependent \n"
808 "on your platform SDL implementation.");
809 }
810 else if (string_is_equal(video_driver, "sdl1"))
811 {
812 snprintf(s, len,
813 "SDL Video driver.\n"
814 " \n"
815 "This is an SDL 1.2 software-rendered video \n"
816 "driver.\n"
817 " \n"
818 "Performance is considered to be suboptimal. \n"
819 "Consider using it only as a last resort.");
820 }
821 else if (string_is_equal(video_driver, "d3d"))
822 {
823 snprintf(s, len,
824 "Direct3D Video driver. \n"
825 " \n"
826 "Performance for software-rendered cores \n"
827 "is dependent on your graphic card's \n"
828 "underlying D3D driver).");
829 }
830 else if (string_is_equal(video_driver, "exynos"))
831 {
832 snprintf(s, len,
833 "Exynos-G2D Video Driver. \n"
834 " \n"
835 "This is a low-level Exynos video driver. \n"
836 "Uses the G2D block in Samsung Exynos SoC \n"
837 "for blit operations. \n"
838 " \n"
839 "Performance for software rendered cores \n"
840 "should be optimal.");
841 }
842 else if (string_is_equal(video_driver, "drm"))
843 {
844 snprintf(s, len,
845 "Plain DRM Video Driver. \n"
846 " \n"
847 "This is a low-level video driver using. \n"
848 "libdrm for hardware scaling using \n"
849 "GPU overlays.");
850 }
851 else if (string_is_equal(video_driver, "sunxi"))
852 {
853 snprintf(s, len,
854 "Sunxi-G2D Video Driver. \n"
855 " \n"
856 "This is a low-level Sunxi video driver. \n"
857 "Uses the G2D block in Allwinner SoCs.");
858 }
859 }
860 break;
861 case MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN:
862 snprintf(s, len,
863 "Audio DSP plugin.\n"
864 " Processes audio before it's sent to \n"
865 "the driver."
866 );
867 break;
868 case MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER:
869 {
870 const char *lbl = settings ? settings->arrays.audio_resampler : NULL;
871
872 if (string_is_equal(lbl, msg_hash_to_str(MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER_SINC)))
873 strlcpy(s,
874 "Windowed SINC implementation.", len);
875 else if (string_is_equal(lbl, msg_hash_to_str(MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER_CC)))
876 strlcpy(s,
877 "Convoluted Cosine implementation.", len);
878 else if (string_is_empty(s))
879 strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE), len);
880 }
881 break;
882 case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET:
883 snprintf(s, len,
884 "Tải Shader Preset. \n"
885 " \n"
886 " Tải a "
887 #ifdef HAVE_CG
888 "Cg"
889 #endif
890 #ifdef HAVE_GLSL
891 #ifdef HAVE_CG
892 "/"
893 #endif
894 "GLSL"
895 #endif
896 #ifdef HAVE_HLSL
897 #if defined(HAVE_CG) || defined(HAVE_HLSL)
898 "/"
899 #endif
900 "HLSL"
901 #endif
902 " preset directly. \n"
903 "The menu shader menu is updated accordingly. \n"
904 " \n"
905 "If the CGP uses scaling methods which are not \n"
906 "simple, (i.e. source scaling, same scaling \n"
907 "factor for X/Y), the scaling factor displayed \n"
908 "in the menu might not be correct."
909 );
910 break;
911 case MENU_ENUM_LABEL_VIDEO_SHADER_SCALE_PASS:
912 snprintf(s, len,
913 "Scale for this pass. \n"
914 " \n"
915 "The scale factor accumulates, i.e. 2x \n"
916 "for first pass and 2x for second pass \n"
917 "will give you a 4x total scale. \n"
918 " \n"
919 "If there is a scale factor for last \n"
920 "pass, the result is stretched to \n"
921 "screen with the filter specified in \n"
922 "'Default Filter'. \n"
923 " \n"
924 "If 'Don't Care' is set, either 1x \n"
925 "scale or stretch to fullscreen will \n"
926 "be used depending if it's not the last \n"
927 "pass or not."
928 );
929 break;
930 case MENU_ENUM_LABEL_VIDEO_SHADER_NUM_PASSES:
931 snprintf(s, len,
932 "Shader Passes. \n"
933 " \n"
934 "RetroArch allows you to mix and match various \n"
935 "shaders with arbitrary shader passes, with \n"
936 "custom hardware filters and scale factors. \n"
937 " \n"
938 "This option specifies the number of shader \n"
939 "passes to use. If you set this to 0, and use \n"
940 "Apply Shader Changes, you use a 'blank' shader. \n"
941 " \n"
942 "The Default Filter option will affect the \n"
943 "stretching filter.");
944 break;
945 case MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS:
946 snprintf(s, len,
947 "Shader Parameters. \n"
948 " \n"
949 "Modifies current shader directly. Will not be \n"
950 "saved to CGP/GLSLP preset file.");
951 break;
952 case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS:
953 snprintf(s, len,
954 "Shader Preset Parameters. \n"
955 " \n"
956 "Modifies shader preset currently in menu."
957 );
958 break;
959 case MENU_ENUM_LABEL_VIDEO_SHADER_PASS:
960 snprintf(s, len,
961 "Path to shader. \n"
962 " \n"
963 "All shaders must be of the same \n"
964 "type (i.e. CG, GLSL or HLSL). \n"
965 " \n"
966 "Set Shader thư mục to set where \n"
967 "the browser starts to look for \n"
968 "shaders."
969 );
970 break;
971 case MENU_ENUM_LABEL_CONFIGURATION_SETTINGS:
972 snprintf(s, len,
973 "Determines how configuration files \n"
974 "are loaded and prioritized.");
975 break;
976 case MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT:
977 snprintf(s, len,
978 "Saves config to disk on exit.\n"
979 "Useful for menu as settings can be\n"
980 "modified. Overwrites the config.\n"
981 " \n"
982 "#include's and comments are not \n"
983 "preserved. \n"
984 " \n"
985 "By design, the config file is \n"
986 "considered immutable as it is \n"
987 "likely maintained by the user, \n"
988 "and should not be overwritten \n"
989 "behind the user's back."
990 #if defined(RARCH_CONSOLE) || defined(RARCH_MOBILE)
991 "\nThis is not not the case on \n"
992 "consoles however, where \n"
993 "looking at the config file \n"
994 "manually isn't really an option."
995 #endif
996 );
997 break;
998 case MENU_ENUM_LABEL_CONFIRM_ON_EXIT:
999 snprintf(s, len, "Are you sure you want to quit?");
1000 break;
1001 case MENU_ENUM_LABEL_SHOW_HIDDEN_FILES:
1002 snprintf(s, len, "Show hidden files\n"
1003 "and folders.");
1004 break;
1005 case MENU_ENUM_LABEL_VIDEO_SHADER_FILTER_PASS:
1006 snprintf(s, len,
1007 "Hardware filter for this pass. \n"
1008 " \n"
1009 "If 'Don't Care' is set, 'Default \n"
1010 "Filter' will be used."
1011 );
1012 break;
1013 case MENU_ENUM_LABEL_AUTOSAVE_INTERVAL:
1014 snprintf(s, len,
1015 "Autosaves the non-volatile SRAM \n"
1016 "at a regular interval.\n"
1017 " \n"
1018 "This is disabled by default unless set \n"
1019 "otherwise. The interval is measured in \n"
1020 "seconds. \n"
1021 " \n"
1022 "A value of 0 disables autosave.");
1023 break;
1024 case MENU_ENUM_LABEL_INPUT_BIND_DEVICE_TYPE:
1025 snprintf(s, len,
1026 "Input Device Type. \n"
1027 " \n"
1028 "Picks which device type to use. This is \n"
1029 "relevant for the libretro core itself."
1030 );
1031 break;
1032 case MENU_ENUM_LABEL_LIBRETRO_LOG_LEVEL:
1033 snprintf(s, len,
1034 "Sets log level for libretro cores \n"
1035 "(GET_LOG_INTERFACE). \n"
1036 " \n"
1037 " If a log level issued by a libretro \n"
1038 " core is below libretro_log level, it \n"
1039 " is ignored.\n"
1040 " \n"
1041 " DEBUG logs are always ignored unless \n"
1042 " verbose mode is activated (--verbose).\n"
1043 " \n"
1044 " DEBUG = 0\n"
1045 " INFO = 1\n"
1046 " WARN = 2\n"
1047 " ERROR = 3"
1048 );
1049 break;
1050 case MENU_ENUM_LABEL_STATE_SLOT_INCREASE:
1051 case MENU_ENUM_LABEL_STATE_SLOT_DECREASE:
1052 snprintf(s, len,
1053 "State slots.\n"
1054 " \n"
1055 " With slot set to 0, save state name is *.state \n"
1056 " (or whatever defined on commandline).\n"
1057 "When slot is != 0, path will be (path)(d), \n"
1058 "where (d) is slot number.");
1059 break;
1060 case MENU_ENUM_LABEL_SHADER_APPLY_CHANGES:
1061 snprintf(s, len,
1062 "Apply Shader Changes. \n"
1063 " \n"
1064 "After changing shader settings, use this to \n"
1065 "apply changes. \n"
1066 " \n"
1067 "Changing shader settings is a somewhat \n"
1068 "expensive operation so it has to be \n"
1069 "done explicitly. \n"
1070 " \n"
1071 "When you apply shaders, the menu shader \n"
1072 "settings are saved to a temporary file (either \n"
1073 "menu.cgp or menu.glslp) and loaded. The file \n"
1074 "persists after RetroArch exits. The file is \n"
1075 "saved to Shader thư mục."
1076 );
1077 break;
1078 case MENU_ENUM_LABEL_MENU_TOGGLE:
1079 snprintf(s, len,
1080 "Bật/tắt menu.");
1081 break;
1082 case MENU_ENUM_LABEL_GRAB_MOUSE_TOGGLE:
1083 snprintf(s, len,
1084 "Bật/tắt mouse grab.\n"
1085 " \n"
1086 "When mouse is grabbed, RetroArch hides the \n"
1087 "mouse, and keeps the mouse pointer inside \n"
1088 "the window to allow relative mouse input to \n"
1089 "work better.");
1090 break;
1091 case MENU_ENUM_LABEL_DISK_NEXT:
1092 snprintf(s, len,
1093 "Cycles through disk images. Use after \n"
1094 "ejecting. \n"
1095 " \n"
1096 " Complete by toggling eject again.");
1097 break;
1098 case MENU_ENUM_LABEL_VIDEO_FILTER:
1099 #ifdef HAVE_FILTERS_BUILTIN
1100 snprintf(s, len,
1101 "CPU-based video filter.");
1102 #else
1103 snprintf(s, len,
1104 "CPU-based video filter.\n"
1105 " \n"
1106 "Path to a dynamic library.");
1107 #endif
1108 break;
1109 case MENU_ENUM_LABEL_AUDIO_DEVICE:
1110 snprintf(s, len,
1111 "Override the default audio device \n"
1112 "the audio driver uses.\n"
1113 "This is driver dependent. E.g.\n"
1114 #ifdef HAVE_ALSA
1115 " \n"
1116 "ALSA wants a PCM device."
1117 #endif
1118 #ifdef HAVE_OSS
1119 " \n"
1120 "OSS wants a path (e.g. /dev/dsp)."
1121 #endif
1122 #ifdef HAVE_JACK
1123 " \n"
1124 "JACK wants portnames (e.g. system:playback1\n"
1125 ",system:playback_2)."
1126 #endif
1127 #ifdef HAVE_RSOUND
1128 " \n"
1129 "RSound wants an IP address to an RSound \n"
1130 "server."
1131 #endif
1132 );
1133 break;
1134 case MENU_ENUM_LABEL_DISK_EJECT_TOGGLE:
1135 snprintf(s, len,
1136 "Bật/tắt eject for disks.\n"
1137 " \n"
1138 "Used for multiple-disk content.");
1139 break;
1140 case MENU_ENUM_LABEL_ENABLE_HOTKEY:
1141 snprintf(s, len,
1142 "Enable other hotkeys.\n"
1143 " \n"
1144 " If this hotkey is bound to either keyboard, \n"
1145 "joybutton or joyaxis, all other hotkeys will \n"
1146 "be disabled unless this hotkey is also held \n"
1147 "at the same time. \n"
1148 " \n"
1149 "This is useful for RETRO_KEYBOARD centric \n"
1150 "implementations which query a large area of \n"
1151 "the keyboard, where it is not desirable that \n"
1152 "hotkeys get in the way.");
1153 break;
1154 case MENU_ENUM_LABEL_REWIND_ENABLE:
1155 snprintf(s, len,
1156 "Enable rewinding.\n"
1157 " \n"
1158 "This will take a performance hit, \n"
1159 "so it is disabled by default.");
1160 break;
1161 case MENU_ENUM_LABEL_LIBRETRO_DIR_PATH:
1162 snprintf(s, len,
1163 "Core thư mục. \n"
1164 " \n"
1165 "A thư mục for where to search for \n"
1166 "libretro core implementations.");
1167 break;
1168 case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_AUTO:
1169 snprintf(s, len,
1170 "Refresh Rate Auto.\n"
1171 " \n"
1172 "The accurate refresh rate of our monitor (Hz).\n"
1173 "This is used to calculate audio input rate with \n"
1174 "the formula: \n"
1175 " \n"
1176 "audio_input_rate = game input rate * display \n"
1177 "refresh rate / game refresh rate\n"
1178 " \n"
1179 "If the implementation does not report any \n"
1180 "values, NTSC defaults will be assumed for \n"
1181 "compatibility.\n"
1182 " \n"
1183 "This value should stay close to 60Hz to avoid \n"
1184 "large pitch changes. If your monitor does \n"
1185 "not run at 60Hz, or something close to it, \n"
1186 "disable VSync, and leave this at its default.");
1187 break;
1188 case MENU_ENUM_LABEL_VIDEO_ROTATION:
1189 snprintf(s, len,
1190 "Forces a certain rotation \n"
1191 "of the screen.\n"
1192 " \n"
1193 "The rotation is added to rotations which\n"
1194 "the libretro core sets (see Video Allow\n"
1195 "Rotate).");
1196 break;
1197 case MENU_ENUM_LABEL_VIDEO_SCALE:
1198 snprintf(s, len,
1199 "Fullscreen resolution.\n"
1200 " \n"
1201 "Resolution of 0 uses the \n"
1202 "resolution of the environment.\n");
1203 break;
1204 case MENU_ENUM_LABEL_FASTFORWARD_RATIO:
1205 snprintf(s, len,
1206 "Fastforward ratio."
1207 " \n"
1208 "The maximum rate at which content will\n"
1209 "be run when using fast forward.\n"
1210 " \n"
1211 " (E.g. 5.0 for 60 fps content => 300 fps \n"
1212 "cap).\n"
1213 " \n"
1214 "RetroArch will go to sleep to ensure that \n"
1215 "the maximum rate will not be exceeded.\n"
1216 "Do not rely on this cap to be perfectly \n"
1217 "accurate.");
1218 break;
1219 case MENU_ENUM_LABEL_VIDEO_MONITOR_INDEX:
1220 snprintf(s, len,
1221 "Which monitor to prefer.\n"
1222 " \n"
1223 "0 (default) means no particular monitor \n"
1224 "is preferred, 1 and up (1 being first \n"
1225 "monitor), suggests RetroArch to use that \n"
1226 "particular monitor.");
1227 break;
1228 case MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN:
1229 snprintf(s, len,
1230 "Forces cropping of overscanned \n"
1231 "frames.\n"
1232 " \n"
1233 "Exact behavior of this option is \n"
1234 "core-implementation specific.");
1235 break;
1236 case MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER:
1237 snprintf(s, len,
1238 "Only scales video in integer \n"
1239 "steps.\n"
1240 " \n"
1241 "The base size depends on system-reported \n"
1242 "geometry and aspect ratio.\n"
1243 " \n"
1244 "If Force Aspect is not set, X/Y will be \n"
1245 "integer scaled independently.");
1246 break;
1247 case MENU_ENUM_LABEL_AUDIO_VOLUME:
1248 snprintf(s, len,
1249 "Audio volume, expressed in dB.\n"
1250 " \n"
1251 " 0 dB is normal volume. No gain will be applied.\n"
1252 "Gain can be controlled in runtime with Input\n"
1253 "Volume Up / Input Volume Down.");
1254 break;
1255 case MENU_ENUM_LABEL_AUDIO_RATE_CONTROL_DELTA:
1256 snprintf(s, len,
1257 "Audio rate control.\n"
1258 " \n"
1259 "Setting this to 0 disables rate control.\n"
1260 "Any other value controls audio rate control \n"
1261 "delta.\n"
1262 " \n"
1263 "Defines how much input rate can be adjusted \n"
1264 "dynamically.\n"
1265 " \n"
1266 " Input rate is defined as: \n"
1267 " input rate * (1.0 +/- (rate control delta))");
1268 break;
1269 case MENU_ENUM_LABEL_AUDIO_MAX_TIMING_SKEW:
1270 snprintf(s, len,
1271 "Maximum audio timing skew.\n"
1272 " \n"
1273 "Defines the maximum change in input rate.\n"
1274 "You may want to increase this to enable\n"
1275 "very large changes in timing, for example\n"
1276 "running PAL cores on NTSC displays, at the\n"
1277 "cost of inaccurate audio pitch.\n"
1278 " \n"
1279 " Input rate is defined as: \n"
1280 " input rate * (1.0 +/- (max timing skew))");
1281 break;
1282 case MENU_ENUM_LABEL_OVERLAY_NEXT:
1283 snprintf(s, len,
1284 "Bật/tắt to next overlay.\n"
1285 " \n"
1286 "Wraps around.");
1287 break;
1288 case MENU_ENUM_LABEL_LOG_VERBOSITY:
1289 snprintf(s, len,
1290 "Enable or disable verbosity level \n"
1291 "of frontend.");
1292 break;
1293 case MENU_ENUM_LABEL_VOLUME_UP:
1294 snprintf(s, len,
1295 "Tăng âm lượng.");
1296 break;
1297 case MENU_ENUM_LABEL_VOLUME_DOWN:
1298 snprintf(s, len,
1299 "Giảm âm lượng.");
1300 break;
1301 case MENU_ENUM_LABEL_VIDEO_DISABLE_COMPOSITION:
1302 snprintf(s, len,
1303 "Forcibly disable composition.\n"
1304 "Only valid on Windows Vista/7 for now.");
1305 break;
1306 case MENU_ENUM_LABEL_PERFCNT_ENABLE:
1307 snprintf(s, len,
1308 "Enable or disable frontend \n"
1309 "performance counters.");
1310 break;
1311 case MENU_ENUM_LABEL_SYSTEM_DIRECTORY:
1312 snprintf(s, len,
1313 "System thư mục. \n"
1314 " \n"
1315 "Sets the 'system' thư mục.\n"
1316 "Cores can query for this\n"
1317 "thư mục to tải BIOSes, \n"
1318 "system-specific configs, etc.");
1319 break;
1320 case MENU_ENUM_LABEL_SAVESTATE_AUTO_SAVE:
1321 case MENU_ENUM_LABEL_SAVESTATE_AUTO_LOAD:
1322 snprintf(s, len,
1323 "Automatically saves a savestate at the \n"
1324 "end of RetroArch's lifetime.\n"
1325 " \n"
1326 "RetroArch will automatically tải any savestate\n"
1327 "with this path on startup if 'Auto Tải State\n"
1328 "is enabled.");
1329 break;
1330 case MENU_ENUM_LABEL_VIDEO_THREADED:
1331 snprintf(s, len,
1332 "Use threaded video driver.\n"
1333 " \n"
1334 "Using this might improve performance at the \n"
1335 "possible cost of latency and more video \n"
1336 "stuttering.");
1337 break;
1338 case MENU_ENUM_LABEL_VIDEO_VSYNC:
1339 snprintf(s, len,
1340 "Video V-Sync.\n");
1341 break;
1342 case MENU_ENUM_LABEL_VIDEO_HARD_SYNC:
1343 snprintf(s, len,
1344 "Attempts to hard-synchronize \n"
1345 "CPU and GPU.\n"
1346 " \n"
1347 "Can reduce latency at the cost of \n"
1348 "performance.");
1349 break;
1350 case MENU_ENUM_LABEL_REWIND_GRANULARITY:
1351 snprintf(s, len,
1352 "Rewind granularity.\n"
1353 " \n"
1354 " When rewinding defined number of \n"
1355 "frames, you can rewind several frames \n"
1356 "at a time, increasing the rewinding \n"
1357 "speed.");
1358 break;
1359 case MENU_ENUM_LABEL_SCREENSHOT:
1360 snprintf(s, len,
1361 "Chụp ảnh màn hình.");
1362 break;
1363 case MENU_ENUM_LABEL_VIDEO_FRAME_DELAY:
1364 snprintf(s, len,
1365 "Sets how many milliseconds to delay\n"
1366 "after VSync before running the core.\n"
1367 "\n"
1368 "Can reduce latency at the cost of\n"
1369 "higher risk of stuttering.\n"
1370 " \n"
1371 "Maximum is 15.");
1372 break;
1373 case MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES:
1374 snprintf(s, len,
1375 "Sets how many frames CPU can \n"
1376 "run ahead of GPU when using 'GPU \n"
1377 "Hard Sync'.\n"
1378 " \n"
1379 "Maximum is 3.\n"
1380 " \n"
1381 " 0: Syncs to GPU immediately.\n"
1382 " 1: Syncs to previous frame.\n"
1383 " 2: Etc ...");
1384 break;
1385 case MENU_ENUM_LABEL_VIDEO_BLACK_FRAME_INSERTION:
1386 snprintf(s, len,
1387 "Inserts a black frame inbetween \n"
1388 "frames.\n"
1389 " \n"
1390 "Useful for 120 Hz monitors who want to \n"
1391 "play 60 Hz material with eliminated \n"
1392 "ghosting.\n"
1393 " \n"
1394 "Video refresh rate should still be \n"
1395 "configured as if it is a 60 Hz monitor \n"
1396 "(divide refresh rate by 2).");
1397 break;
1398 case MENU_ENUM_LABEL_RGUI_SHOW_START_SCREEN:
1399 snprintf(s, len,
1400 "Show startup screen in menu.\n"
1401 "Is automatically set to false when seen\n"
1402 "for the first time.\n"
1403 " \n"
1404 "This is only updated in config if\n"
1405 "'Save Configuration on Exit' is enabled.\n");
1406 break;
1407 case MENU_ENUM_LABEL_VIDEO_FULLSCREEN:
1408 snprintf(s, len, "Bật/tắt chế độ toàn màn hình.");
1409 break;
1410 case MENU_ENUM_LABEL_BLOCK_SRAM_OVERWRITE:
1411 snprintf(s, len,
1412 "Block SRAM from being overwritten \n"
1413 "when loading save states.\n"
1414 " \n"
1415 "Might potentially lead to buggy games.");
1416 break;
1417 case MENU_ENUM_LABEL_PAUSE_NONACTIVE:
1418 snprintf(s, len,
1419 "Pause gameplay when window focus \n"
1420 "is lost.");
1421 break;
1422 case MENU_ENUM_LABEL_VIDEO_GPU_SCREENSHOT:
1423 snprintf(s, len,
1424 "Screenshots output of GPU shaded \n"
1425 "material if available.");
1426 break;
1427 case MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY:
1428 snprintf(s, len,
1429 "Screenshot thư mục. \n"
1430 " \n"
1431 "thư mục to dump screenshots to."
1432 );
1433 break;
1434 case MENU_ENUM_LABEL_VIDEO_SWAP_INTERVAL:
1435 snprintf(s, len,
1436 "VSync Swap Interval.\n"
1437 " \n"
1438 "Uses a custom swap interval for VSync. Set this \n"
1439 "to effectively halve monitor refresh rate.");
1440 break;
1441 case MENU_ENUM_LABEL_SAVEFILE_DIRECTORY:
1442 snprintf(s, len,
1443 "Savefile thư mục. \n"
1444 " \n"
1445 "Save all save files (*.srm) to this \n"
1446 "thư mục. This includes related files like \n"
1447 ".bsv, .rt, .psrm, etc...\n"
1448 " \n"
1449 "This will be overridden by explicit command line\n"
1450 "options.");
1451 break;
1452 case MENU_ENUM_LABEL_SAVESTATE_DIRECTORY:
1453 snprintf(s, len,
1454 "Savestate thư mục. \n"
1455 " \n"
1456 "Save all save states (*.state) to this \n"
1457 "thư mục.\n"
1458 " \n"
1459 "This will be overridden by explicit command line\n"
1460 "options.");
1461 break;
1462 case MENU_ENUM_LABEL_ASSETS_DIRECTORY:
1463 snprintf(s, len,
1464 "Assets thư mục. \n"
1465 " \n"
1466 " This location is queried by default when \n"
1467 "menu interfaces try to look for loadable \n"
1468 "assets, etc.");
1469 break;
1470 case MENU_ENUM_LABEL_DYNAMIC_WALLPAPERS_DIRECTORY:
1471 snprintf(s, len,
1472 "Dynamic Wallpapers thư mục. \n"
1473 " \n"
1474 " The place to store wallpapers that will \n"
1475 "be loaded dynamically by the menu depending \n"
1476 "on context.");
1477 break;
1478 case MENU_ENUM_LABEL_SLOWMOTION_RATIO:
1479 snprintf(s, len,
1480 "Slowmotion ratio."
1481 " \n"
1482 "When slowmotion, content will slow\n"
1483 "down by factor.");
1484 break;
1485 case MENU_ENUM_LABEL_INPUT_TURBO_PERIOD:
1486 snprintf(s, len,
1487 "Turbo period.\n"
1488 " \n"
1489 "Describes the period of which turbo-enabled\n"
1490 "buttons toggle.\n"
1491 " \n"
1492 "Numbers are described in frames."
1493 );
1494 break;
1495 case MENU_ENUM_LABEL_INPUT_DUTY_CYCLE:
1496 snprintf(s, len,
1497 "Duty cycle.\n"
1498 " \n"
1499 "Describes how long the period of a turbo-enabled\n"
1500 "should be.\n"
1501 " \n"
1502 "Numbers are described in frames."
1503 );
1504 break;
1505 case MENU_ENUM_LABEL_INPUT_TOUCH_ENABLE:
1506 snprintf(s, len, "Enable touch support.");
1507 break;
1508 case MENU_ENUM_LABEL_INPUT_PREFER_FRONT_TOUCH:
1509 snprintf(s, len, "Use front instead of back touch.");
1510 break;
1511 case MENU_ENUM_LABEL_MOUSE_ENABLE:
1512 snprintf(s, len, "Enable mouse input inside the menu.");
1513 break;
1514 case MENU_ENUM_LABEL_POINTER_ENABLE:
1515 snprintf(s, len, "Enable touch input inside the menu.");
1516 break;
1517 case MENU_ENUM_LABEL_MENU_WALLPAPER:
1518 snprintf(s, len, "Path to an image to set as the background.");
1519 break;
1520 case MENU_ENUM_LABEL_NAVIGATION_WRAPAROUND:
1521 snprintf(s, len,
1522 "Wrap-around to beginning and/or end \n"
1523 "if boundary of list is reached \n"
1524 "horizontally and/or vertically.");
1525 break;
1526 case MENU_ENUM_LABEL_PAUSE_LIBRETRO:
1527 snprintf(s, len,
1528 "If disabled, the libretro core will keep \n"
1529 "running in the background when we are in the \n"
1530 "menu.");
1531 break;
1532 case MENU_ENUM_LABEL_SUSPEND_SCREENSAVER_ENABLE:
1533 snprintf(s, len,
1534 "Suspends the screensaver. Is a hint that \n"
1535 "does not necessarily have to be \n"
1536 "honored by the video driver.");
1537 break;
1538 case MENU_ENUM_LABEL_NETPLAY_MODE:
1539 snprintf(s, len,
1540 "Netplay client mode for the current user. \n"
1541 "Will be 'Server' mode if disabled.");
1542 break;
1543 case MENU_ENUM_LABEL_NETPLAY_DELAY_FRAMES:
1544 snprintf(s, len,
1545 "The amount of delay frames to use for netplay. \n"
1546 " \n"
1547 "Increasing this value will increase \n"
1548 "performance, but introduce more latency.");
1549 break;
1550 case MENU_ENUM_LABEL_NETPLAY_CHECK_FRAMES:
1551 snprintf(s, len,
1552 "The frequency in frames with which netplay \n"
1553 "will verify that the host and client are in \n"
1554 "sync. \n"
1555 " \n"
1556 "With most cores, this value will have no \n"
1557 "visible effect and can be ignored. With \n"
1558 "nondeterminstic cores, this value determines \n"
1559 "how often the netplay peers will be brought \n"
1560 "into sync. With buggy cores, setting this \n"
1561 "to any non-zero value will cause severe \n"
1562 "performance issues. Set to zero to perform \n"
1563 "no checks. This value is only used on the \n"
1564 "netplay host. \n");
1565 break;
1566 case MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES:
1567 snprintf(s, len,
1568 "Maximum amount of swapchain images. This \n"
1569 "can tell the video driver to use a specific \n"
1570 "video buffering mode. \n"
1571 " \n"
1572 "Single buffering - 1\n"
1573 "Double buffering - 2\n"
1574 "Triple buffering - 3\n"
1575 " \n"
1576 "Setting the right buffering mode can have \n"
1577 "a big impact on latency.");
1578 break;
1579 case MENU_ENUM_LABEL_VIDEO_SMOOTH:
1580 snprintf(s, len,
1581 "Smoothens picture with bilinear filtering. \n"
1582 "Should be disabled if using shaders.");
1583 break;
1584 case MENU_ENUM_LABEL_VIDEO_CTX_SCALING:
1585 snprintf(s, len,
1586 #ifdef HAVE_ODROIDGO2
1587 "RGA scaling and bicubic filtering. May break widgets."
1588 #else
1589 "Hardware context scaling (if available)."
1590 #endif
1591 );
1592 break;
1593 case MENU_ENUM_LABEL_TIMEDATE_ENABLE:
1594 snprintf(s, len,
1595 "Shows current date and/or time inside menu.");
1596 break;
1597 case MENU_ENUM_LABEL_CORE_ENABLE:
1598 snprintf(s, len,
1599 "Shows current core inside menu.");
1600 break;
1601 case MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST:
1602 snprintf(s, len,
1603 "Enables Netplay in host (server) mode.");
1604 break;
1605 case MENU_ENUM_LABEL_NETPLAY_ENABLE_CLIENT:
1606 snprintf(s, len,
1607 "Enables Netplay in client mode.");
1608 break;
1609 case MENU_ENUM_LABEL_NETPLAY_DISCONNECT:
1610 snprintf(s, len,
1611 "Disconnects an active Netplay connection.");
1612 break;
1613 case MENU_ENUM_LABEL_NETPLAY_SETTINGS:
1614 snprintf(s, len,
1615 "Setting related to Netplay.");
1616 break;
1617 case MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS:
1618 snprintf(s, len,
1619 "Search for and connect to netplay hosts on the local network.");
1620 break;
1621 case MENU_ENUM_LABEL_DYNAMIC_WALLPAPER:
1622 snprintf(s, len,
1623 "Dynamically tải a new wallpaper \n"
1624 "depending on context.");
1625 break;
1626 case MENU_ENUM_LABEL_CORE_UPDATER_BUILDBOT_URL:
1627 snprintf(s, len,
1628 "URL to core updater thư mục on the \n"
1629 "Libretro buildbot.");
1630 break;
1631 case MENU_ENUM_LABEL_BUILDBOT_ASSETS_URL:
1632 snprintf(s, len,
1633 "URL to assets updater thư mục on the \n"
1634 "Libretro buildbot.");
1635 break;
1636 case MENU_ENUM_LABEL_INPUT_REMAP_BINDS_ENABLE:
1637 snprintf(s, len,
1638 "if enabled, overrides the input binds \n"
1639 "with the remapped binds set for the \n"
1640 "current core.");
1641 break;
1642 case MENU_ENUM_LABEL_OVERLAY_DIRECTORY:
1643 snprintf(s, len,
1644 "Overlay thư mục. \n"
1645 " \n"
1646 "Defines a thư mục where overlays are \n"
1647 "kept for easy access.");
1648 break;
1649 case MENU_ENUM_LABEL_INPUT_MAX_USERS:
1650 snprintf(s, len,
1651 "Maximum amount of users supported by \n"
1652 "RetroArch.");
1653 break;
1654 case MENU_ENUM_LABEL_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE:
1655 snprintf(s, len,
1656 "After downloading, automatically extract \n"
1657 "archives that the downloads are contained \n"
1658 "inside.");
1659 break;
1660 case MENU_ENUM_LABEL_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE:
1661 snprintf(s, len,
1662 "Filter files being shown by \n"
1663 "supported extensions.");
1664 break;
1665 case MENU_ENUM_LABEL_NETPLAY_NICKNAME:
1666 snprintf(s, len,
1667 "The username of the person running RetroArch. \n"
1668 "This will be used for playing online games.");
1669 break;
1670 case MENU_ENUM_LABEL_NETPLAY_TCP_UDP_PORT:
1671 snprintf(s, len,
1672 "The port of the host IP address. \n"
1673 "Can be either a TCP or UDP port.");
1674 break;
1675 case MENU_ENUM_LABEL_NETPLAY_SPECTATOR_MODE_ENABLE:
1676 snprintf(s, len,
1677 "Enable or disable spectator mode for \n"
1678 "the user during netplay.");
1679 break;
1680 case MENU_ENUM_LABEL_NETPLAY_IP_ADDRESS:
1681 snprintf(s, len,
1682 "The address of the host to connect to.");
1683 break;
1684 case MENU_ENUM_LABEL_STDIN_CMD_ENABLE:
1685 snprintf(s, len,
1686 "Enable stdin command interface.");
1687 break;
1688 case MENU_ENUM_LABEL_UI_COMPANION_START_ON_BOOT:
1689 snprintf(s, len,
1690 "Start User Interface companion driver \n"
1691 "on boot (if available).");
1692 break;
1693 case MENU_ENUM_LABEL_MENU_DRIVER:
1694 snprintf(s, len, "Menu driver to use.");
1695 break;
1696 case MENU_ENUM_LABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO:
1697 snprintf(s, len,
1698 "Gamepad button combination to toggle menu. \n"
1699 " \n"
1700 "0 - None \n"
1701 "1 - Press L + R + Y + D-Pad Down \n"
1702 "simultaneously. \n"
1703 "2 - Press L3 + R3 simultaneously. \n"
1704 "3 - Press Start + Select simultaneously.");
1705 break;
1706 case MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU:
1707 snprintf(s, len, "Allow any RetroPad to control the menu.");
1708 break;
1709 case MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE:
1710 snprintf(s, len,
1711 "Enable input auto-detection.\n"
1712 " \n"
1713 "Will attempt to auto-configure \n"
1714 "joypads, Plug-and-Play style.");
1715 break;
1716 case MENU_ENUM_LABEL_CAMERA_ALLOW:
1717 snprintf(s, len,
1718 "Allow or disallow camera access by \n"
1719 "cores.");
1720 break;
1721 case MENU_ENUM_LABEL_LOCATION_ALLOW:
1722 snprintf(s, len,
1723 "Allow or disallow location services \n"
1724 "access by cores.");
1725 break;
1726 case MENU_ENUM_LABEL_TURBO:
1727 snprintf(s, len,
1728 "Turbo enable.\n"
1729 " \n"
1730 "Holding the turbo while pressing another \n"
1731 "button will let the button enter a turbo \n"
1732 "mode where the button state is modulated \n"
1733 "with a periodic signal. \n"
1734 " \n"
1735 "The modulation stops when the button \n"
1736 "itself (not turbo button) is released.");
1737 break;
1738 case MENU_ENUM_LABEL_OSK_ENABLE:
1739 snprintf(s, len,
1740 "Enable/disable on-screen keyboard.");
1741 break;
1742 case MENU_ENUM_LABEL_AUDIO_MUTE:
1743 snprintf(s, len,
1744 "Tắt/Bật âm thanh.");
1745 break;
1746 case MENU_ENUM_LABEL_REWIND:
1747 snprintf(s, len,
1748 "Hold button down to rewind.\n"
1749 " \n"
1750 "Rewind must be enabled.");
1751 break;
1752 case MENU_ENUM_LABEL_EXIT_EMULATOR:
1753 snprintf(s, len,
1754 "Key to exit RetroArch cleanly."
1755 #if !defined(RARCH_MOBILE) && !defined(RARCH_CONSOLE)
1756 "\nKilling it in any hard way (SIGKILL, \n"
1757 "etc) will terminate without saving\n"
1758 "RAM, etc. On Unix-likes,\n"
1759 "SIGINT/SIGTERM allows\n"
1760 "a clean deinitialization."
1761 #endif
1762 );
1763 break;
1764 case MENU_ENUM_LABEL_LOAD_STATE:
1765 snprintf(s, len,
1766 "Tải state.");
1767 break;
1768 case MENU_ENUM_LABEL_SAVE_STATE:
1769 snprintf(s, len,
1770 "Saves state.");
1771 break;
1772 case MENU_ENUM_LABEL_CHEAT_INDEX_PLUS:
1773 snprintf(s, len,
1774 "Increment cheat index.\n");
1775 break;
1776 case MENU_ENUM_LABEL_CHEAT_INDEX_MINUS:
1777 snprintf(s, len,
1778 "Decrement cheat index.\n");
1779 break;
1780 case MENU_ENUM_LABEL_SHADER_PREV:
1781 snprintf(s, len,
1782 "Áp dụng previous shader in thư mục.");
1783 break;
1784 case MENU_ENUM_LABEL_SHADER_NEXT:
1785 snprintf(s, len,
1786 "Áp dụng next shader in thư mục.");
1787 break;
1788 case MENU_ENUM_LABEL_RESET:
1789 snprintf(s, len,
1790 "Reset the content.\n");
1791 break;
1792 case MENU_ENUM_LABEL_PAUSE_TOGGLE:
1793 snprintf(s, len,
1794 "Toggle between paused and non-paused state.");
1795 break;
1796 case MENU_ENUM_LABEL_CHEAT_TOGGLE:
1797 snprintf(s, len,
1798 "Toggle cheat index.\n");
1799 break;
1800 case MENU_ENUM_LABEL_HOLD_FAST_FORWARD:
1801 snprintf(s, len,
1802 "Hold for fast-forward. Releasing button \n"
1803 "disables fast-forward.");
1804 break;
1805 case MENU_ENUM_LABEL_SLOWMOTION_HOLD:
1806 snprintf(s, len,
1807 "Hold for slowmotion.");
1808 break;
1809 case MENU_ENUM_LABEL_FRAME_ADVANCE:
1810 snprintf(s, len,
1811 "Frame advance when content is paused.");
1812 break;
1813 case MENU_ENUM_LABEL_BSV_RECORD_TOGGLE:
1814 snprintf(s, len,
1815 "Toggle between recording and not.");
1816 break;
1817 case MENU_ENUM_LABEL_L_X_PLUS:
1818 case MENU_ENUM_LABEL_L_X_MINUS:
1819 case MENU_ENUM_LABEL_L_Y_PLUS:
1820 case MENU_ENUM_LABEL_L_Y_MINUS:
1821 case MENU_ENUM_LABEL_R_X_PLUS:
1822 case MENU_ENUM_LABEL_R_X_MINUS:
1823 case MENU_ENUM_LABEL_R_Y_PLUS:
1824 case MENU_ENUM_LABEL_R_Y_MINUS:
1825 snprintf(s, len,
1826 "Axis for analog stick (DualShock-esque).\n"
1827 " \n"
1828 "Bound as usual, however, if a real analog \n"
1829 "axis is bound, it can be read as a true analog.\n"
1830 " \n"
1831 "Positive X axis is right. \n"
1832 "Positive Y axis is down.");
1833 break;
1834 case MENU_ENUM_LABEL_VALUE_WHAT_IS_A_CORE_DESC:
1835 snprintf(s, len,
1836 "RetroArch by itself does nothing. \n"
1837 " \n"
1838 "To make it do things, you need to \n"
1839 "tải a program into it. \n"
1840 "\n"
1841 "We call such a program 'Libretro core', \n"
1842 "or 'core' in short. \n"
1843 " \n"
1844 "To tải a core, select one from\n"
1845 "'Tải Core'.\n"
1846 " \n"
1847 #ifdef HAVE_NETWORKING
1848 "You can obtain cores in several ways: \n"
1849 "* Download them by going to\n"
1850 "'%s' -> '%s'.\n"
1851 "* Manually move them over to\n"
1852 "'%s'.",
1853 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER),
1854 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST),
1855 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH)
1856 #else
1857 "You can obtain cores by\n"
1858 "manually moving them over to\n"
1859 "'%s'.",
1860 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH)
1861 #endif
1862 );
1863 break;
1864 case MENU_ENUM_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD_DESC:
1865 snprintf(s, len,
1866 "You can change the virtual gamepad overlay\n"
1867 "by going to '%s' -> '%s'."
1868 " \n"
1869 "From there you can change the overlay,\n"
1870 "change the size and opacity of the buttons, etc.\n"
1871 " \n"
1872 "NOTE: By default, virtual gamepad overlays are\n"
1873 "hidden when in the menu.\n"
1874 "If you'd like to change this behavior,\n"
1875 "you can set '%s' to false.",
1876 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SETTINGS),
1877 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS),
1878 msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU)
1879 );
1880 break;
1881 default:
1882 if (string_is_empty(s))
1883 strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE), len);
1884 return -1;
1885 }
1886
1887 return 0;
1888 }
1889
msg_hash_to_str_vn(enum msg_hash_enums msg)1890 const char *msg_hash_to_str_vn(enum msg_hash_enums msg)
1891 {
1892 switch (msg)
1893 {
1894 #include "msg_hash_vn.h"
1895 default:
1896 break;
1897 }
1898
1899 return "null";
1900 }
1901