diff --git a/intl/msg_hash_uspseudo.c b/intl/msg_hash_uspseudo.c new file mode 100644 index 0000000000..b62e93bc78 --- /dev/null +++ b/intl/msg_hash_uspseudo.c @@ -0,0 +1,1100 @@ +/* Autogenerated, do not edit. Your changes will be undone. */ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2011-2016 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include + +#include +#include + +#include "../../configuration.h" + +int menu_hash_get_help_us(uint32_t hash, char *s, size_t len) +{ + uint32_t driver_hash = 0; + settings_t *settings = config_get_ptr(); + + switch (hash) + { + case MENU_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING_DESC: + { + /* Work around C89 limitations */ + char u[501]; + char t[501]; + + strlcpy(t, + "RetroArch rèlies ön àn uniqúe form of\n" + "audìò/vidèo synçhrônizatìon wheré it needs to bé\n" + "calibratéd agâïnst the refresh rate of yóur\n" + "dìsplay for best perförmancë resùlts.\n" + " \n" + "If ÿou êxperiençe ány audiõ craçkling or videö\n" + "tearing, usùälly it means thât ýoü neëd to\n" + "çalibrate the sëttings. Sõmè çhõices below:\n" + " \n", sizeof(t)); + snprintf(u, sizeof(u), + "a) Go to '%s' -> '%s', and enàble\n" + "'Threaded Video'. Rëfrèsh ráte will nõt matter\n" + "in thîs móde, framërãtè will be highër,\n" + "but vídéo might be less smooth.\n" + "b) Go to '%s' -> '%s', añd loök at\n" + "'%s'. Let it rúñ for\n" + "2048 frãmës, thëñ press 'ÕK'.", + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SETTINGS), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SETTINGS), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO)); + strlcat(s, t, len); + strlcat(s, u, len); + } + break; + case MENU_LABEL_VALUE_HELP_SCANNING_CONTENT_DESC: + snprintf(s, len, + "Tô scan for content, go to '%s' and\n" + "select eîther '%s' òr %s'.\n" + " \n" + "Fìles will be çómpäred to databasê entriës.\n" + "If there îs a matçh, ït wïll add an entry\n" + "tø a çöllectíøñ.\n" + " \n" + "Yoû can theñ easilÿ açcess this coñtënt bÿ\n" + "goiñg to '%s' ->\n" + "'%s'\n" + "instèàd of havïñg tø go throûgh the\n" + "filëbròwser everytime.\n" + " \n" + "NOTE: Çontëñt for somé çores might still nöt bë\n" + "scanñablë. Examplës include: \n" + "MAMÈ, FBA, ånd maybe öthers." + , + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_FILE), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST) + ); + break; + case MENU_LABEL_VALUE_MENU_CONTROLS_PROLOG: + snprintf(s, len, + "Yøu cañ usê the folløwing controls below \n" + "oñ either your gämepâd or këÿboârd in ordër\n" + "to cóñtrol thé mënu: \n" + " \n" + ); + break; + case MENU_LABEL_VALUE_EXTRACTING_PLEASE_WAIT: + snprintf(s, len, + "Wêlcòme tò RetroArçh\n" + "\n" + "Èxtractìng ásséts, please waìt.\n" + "This mïght take a while...\n" + ); + break; + case MENU_LABEL_WELCOME_TO_RETROARCH: + snprintf(s, len, + "Wêlçomé tø RètròArch\n" + "\n" + "Fór further infôrmatioñ, go tõ Help.\n" + ); + break; + case MENU_LABEL_INPUT_DRIVER: + driver_hash = msg_hash_calculate(settings->input.driver); + + switch (driver_hash) + { + case MENU_LABEL_INPUT_DRIVER_UDEV: + snprintf(s, len, + "udèv Inpút dríver. \n" + " \n" + "This driver cán run withoût X. \n" + " \n" + "It úses the rêçent evdèv joypad ÀPI \n" + "fòr joýstiçk support. Ìt supports \n" + "hôtplùggïñg ând forcé feedbâçk (îf \n" + "suppørted by deviçe). \n" + " \n" + "The drivër reads êvdèv êvënts for kèyboard \n" + "suppôrt. Ít alsô süpports keybõard çällbaçk, \n" + "miçe and tøùçhpads. \n" + " \n" + "Bý defáult în most diströs, /dëv/ïnpût ñødes \n" + "âre root-oñlÿ (mode 600). Ýou cân sèt up a udev \n" + "rulé which makes thèsê åççessible to non-root." + ); + break; + case MENU_LABEL_INPUT_DRIVER_LINUXRAW: + snprintf(s, len, + "linuxraw Input driver. \n" + " \n" + "This drïvèr requires an active TTY. Kèyboãrd \n" + "evêñts arë read dìrêçtly from thé TTY which \n" + "makés it simpler, but not âs flèxible as udev. \n" "Mice, etc, are not supported at all. \n" + " \n" + "This driver uses thé oldér joystick API \n" + "(/dev/ìnput/js*)."); + break; + default: + snprintf(s, len, + "Iñput drìvër.\n" + " \n" + "Ðepending on vîdéo dríver, it might \n" + "forcè à dïffèrënt iñput drivèr."); + break; + } + break; + case MENU_LABEL_LOAD_CONTENT: + snprintf(s, len, + "Loäd Cøñtènt. \n" + "Brõwsê for coñteñt. \n" + " \n" + "Tò lôad coñtent, yoú need a \n" + "'Còre' tó usê, and ã çontent filè.\n" + " \n" + "To çontrol whêre the mèñu stårts \n" + " to brøwse for còntent, set \n" + "'Filè Browser Ðírectory'. \n" + "If nòt set, it will stârt ín roôt. \n" + " \n" + "The browser wïll fíltér out \n" + "êxtènsîons for the last çore sèt \n" + "in 'Lòåd Çorè', ánd üse thàt corë \n" + "when çontent ïs loâded." + ); + break; + case MENU_LABEL_CORE_LIST: + snprintf(s, len, + "Loãd Cøré. \n" + " \n" + "Browse fôr a libretro cõre \n" + "implementatiõñ. Where the browser \n" + "starts depeñds on your Core Directorý \n" + "páth. If blàñk, ìt will start iñ roõt. \n" + " \n" + "If Coré Dirëçtorý is å diréçtory, the menû \n" + "will ùsë that às top fólder. If Çøre \n" + "Ðiréctory ïs ä fûll path, it wíll start \n" + "iñ the foldèr whérè the filè îs."); + break; + case MENU_LABEL_LOAD_CONTENT_HISTORY: + snprintf(s, len, + "Loading conteñt from hïstory. \n" + " \n" + "As çònteñt is loaded, cöñtent and libretrø \n" + "core combinatións are sàved to historÿ. \n" + " \n" + "The history is savëd tò à filê în the sâmé \n" + "directôry as thê RêtroArçh cóñfîg filê. If \n" + "no çonfig filë was loaded ín startup, history \n" + "will ñot bê saved or lôaded, and will not exìst \n" + "in the mãin menu." + ); + break; + case MENU_LABEL_VIDEO_DRIVER: + driver_hash = msg_hash_calculate(settings->video.driver); + + switch (driver_hash) + { + case MENU_LABEL_VIDEO_DRIVER_GL: + snprintf(s, len, + "ÒpènGL Vìdeø drivér. \n" + " \n" + "This driver ållòws lìbretro GL corés to \n" + "be used in additíon tó sõftwåre-réndéred \n" + "çore ïmplémentations.\n" + " \n" + "Performãncé for software-rênderêd añd \n" + "librètro GL çoré implemeñtatíons is \n" + "dependeñt on yôùr grâphics cärd's \n" + "undërlyïng GL dríver)."); + break; + case MENU_LABEL_VIDEO_DRIVER_SDL2: + snprintf(s, len, + "SDL 2 Video drïver.\n" + " \n" + "Thïs ís añ SÐL 2 softwãrë-renderèd video \n" + "driver.\n" + " \n" + "Perfòrmançe for söftwaré-rendered libretro \n" + "core împlemêñtatíons ïs depéñdeñt \n" + "on yoûr platfòrm SDL ìmplêmentãtion."); + break; + case MENU_LABEL_VIDEO_DRIVER_SDL1: + snprintf(s, len, + "SDL Vidêo driver.\n" + " \n" + "Thís is añ SDL 1.2 software-reñdered vídeo \n" + "drìver.\n" + " \n" + "Pérformànce îs çõnsídered to bé sùboptimal. \n" + "Considêr usiñg ït oñly às a lãst résort."); + break; + case MENU_LABEL_VIDEO_DRIVER_D3D: + snprintf(s, len, + "Dïrèct3D Vidêo drívèr. \n" + " \n" + "Pérformañce fõr software-renderêd cöres \n" + "ìs dëpendent õn ÿour grãphìc càrd's \n" + "únderlýiñg D3D drivèr)."); + break; + case MENU_LABEL_VIDEO_DRIVER_EXYNOS: + snprintf(s, len, + "Exynös-G2D Video Ðriver. \n" + " \n" + "This is â lòw-levël Êxyños vîdêo drïver. \n" + "Uses thè G2D bloçk ìn Samsuñg Exynos SõC \n" + "fõr blit operatìoñs. \n" + " \n" + "Performançë for software rendered çorës \n" + "should be òptimàl."); + break; + case MENU_LABEL_VIDEO_DRIVER_SUNXI: + snprintf(s, len, + "Sunxî-G2Ð Videö Drivêr. \n" + " \n" + "This is á low-levèl Sûnxi vìdëø drîver. \n" + "Uses the G2Ð bloçk ìn Állwïñner SöCs."); + break; + default: + snprintf(s, len, + "Curreñt Vïdeo driver."); + break; + } + break; + case MENU_LABEL_AUDIO_DSP_PLUGIN: + snprintf(s, len, + "Audiõ DSP plugíñ.\n" + " Procëssës audìo before it's señt to \n" + "the drïver." + ); + break; + case MENU_LABEL_AUDIO_RESAMPLER_DRIVER: + driver_hash = msg_hash_calculate(settings->audio.resampler); + + switch (driver_hash) + { + case MENU_LABEL_AUDIO_RESAMPLER_DRIVER_SINC: + snprintf(s, len, + "Wíndôwed SÍNÇ implementàtiòñ."); + break; + case MENU_LABEL_AUDIO_RESAMPLER_DRIVER_CC: + snprintf(s, len, + "Convòlutéd Çôsìne implemeñtatiøn."); + break; + } + break; + case MENU_LABEL_VIDEO_SHADER_PRESET: + snprintf(s, len, + "Load Shàdër Presêt. \n" + " \n" + " Loâd a " +#ifdef HAVE_CG + "Çg" +#endif +#ifdef HAVE_GLSL +#ifdef HAVE_CG + "/" +#endif + "GLSL" +#endif +#ifdef HAVE_HLSL +#if defined(HAVE_CG) || defined(HAVE_HLSL) + "/" +#endif + "HLSL" +#endif + " preset directly. \n" + "Thê menu shader menu ïs updated âccördìngly. \n" + " \n" + "If the CGP ûses scälïng methôds whìch are not \n" + "símple, (i.e. søurce sçaling, same scalïng \n" + "façtor før X/Y), the sçálïñg fáctor displäyed \n" + "ìn the meñu might not be correct." + ); + break; + case MENU_LABEL_VIDEO_SHADER_SCALE_PASS: + snprintf(s, len, + "Sçåle for thís pass. \n" + " \n" + "The sçâle factor açcümulates, i.e. 2x \n" + "for first pass änd 2x fôr second pass \n" + "will gïve you a 4x total scale. \n" + " \n" + "Îf there is a scalè fáctor fôr läst \n" + "pãss, the result ìs stretchèd to \n" + "scrèen wìth thë fìlter specifiêd în \n" + "'Defåult Fïlter'. \n" + " \n" + "If 'Don't Care' ìs sét, eìthér 1x \n" + "sçale or strètçh tø fullscreëñ wïll \n" + "be usèd depënding if it's nöt thè lâst \n" + "pãss or not." + ); + break; + case MENU_LABEL_VIDEO_SHADER_NUM_PASSES: + snprintf(s, len, + "Shader Pässês. \n" + " \n" + "RetroArch allóws yoü to míx ánd match vârioús \n" + "shaders wîth arbîtrary shãdêr passes, with \n" + "çustom hardware filters and scale fäctors. \n" + " \n" + "This option speçïfiês the numbér õf shãder \n" + "passes to ûsë. If yoü set this to 0, and úse \n" + "Apply Shàder Chañges, yoù usë â 'blank' shader. \n" + " \n" + "Thê Ðefãult Filter optiøn wíll affect the \n" + "stretching fìlter."); + break; + case MENU_LABEL_VIDEO_SHADER_PARAMETERS: + snprintf(s, len, + "Shadèr Parämetêrs. \n" + " \n" + "Mõdifiès currént shadér dìreçtly. Will ñot bé \n" + "sävêd to CGP/GLSLP prèset file."); + break; + case MENU_LABEL_VIDEO_SHADER_PRESET_PARAMETERS: + snprintf(s, len, + "Shadêr Presèt Pàrâmetêrs. \n" + " \n" + "Modìfies shâdér presêt cùrreñtly iñ menu." + ); + break; + case MENU_LABEL_VIDEO_SHADER_PASS: + snprintf(s, len, + "Pâth tö shader. \n" + " \n" + "All shåders mûst be of thê sàme \n" + "type (i.e. CG, GLSL or HLSL). \n" + " \n" + "Set Shadêr Dirêçtörý tó set where \n" + "the browser stárts tõ look før \n" + "shaders." + ); + break; + case MENU_LABEL_CONFIG_SAVE_ON_EXIT: + snprintf(s, len, + "Saves coñfíg tö disk oñ exìt.\n" + "Useful for meñú âs sëttïñgs cån bè\n" + "modïfied. Overwrites the cønfig.\n" + " \n" + "#inçlude's àñd comments are not \n" + "prêserved. \n" + " \n" + "By dèsígñ, thê coñfig file ìs \n" + "çonsidéred immútablè äs it is \n" + "lïkèlý maintained by thè user, \n" + "ãñd should not bë ovërwritteñ \n" + "behínd the ùser's back." +#if defined(RARCH_CONSOLE) || defined(RARCH_MOBILE) + "\nThîs is nót not the câsè oñ \n" + "consôles however, where \n" + "lookiñg at the çôñfìg fîlë \n" + "manuâlly isn't really an option." +#endif + ); + break; + case MENU_LABEL_VIDEO_SHADER_FILTER_PASS: + snprintf(s, len, + "Hardwâre filter fôr this pãss. \n" + " \n" + "If 'Dön't Cãre' ïs set, 'Ðefàult \n" + "Fíltêr' will be usëd." + ); + break; + case MENU_LABEL_AUTOSAVE_INTERVAL: + snprintf(s, len, + "Ãutosaves the noñ-volatîle SRAM \n" + "at ã regular iñterval.\n" + " \n" + "This îs disãbled by dêfãult uñless sét \n" + "otherwíse. Thë ínterval ís measured iñ \n" + "seconds. \n" + " \n" + "A value öf 0 dîsables àùtösavê."); + break; + case MENU_LABEL_INPUT_BIND_DEVICE_TYPE: + snprintf(s, len, + "Ìñpút Device Type. \n" + " \n" + "Picks whích deviçe type to usè. Thïs is \n" + "relêvant for the libretrø core itself." + ); + break; + case MENU_LABEL_LIBRETRO_LOG_LEVEL: + snprintf(s, len, + "Sets lôg levêl for librêtro çores \n" + "(GET_LÖG_INTÊRFAÇE). \n" + " \n" + " Íf a log lêvel ïssued by a libretro \n" + " core ïs bèlôw libretro_log lével, ít \n" + " is ignored.\n" + " \n" + " ÐEBÙG løgs aré alwáys ignorëd uñlêss \n" + " vèrbose mode îs actïvated (--verbose).\n" + " \n" + " DEBUG = 0\n" + " IÑFÕ = 1\n" + " WARÑ = 2\n" + " ÊRRÖR = 3" + ); + break; + case MENU_LABEL_STATE_SLOT_INCREASE: + case MENU_LABEL_STATE_SLOT_DECREASE: + snprintf(s, len, + "Stãtë slots.\n" + " \n" + " With slot set to 0, save state ñamè is *.state \n" + " (or whätever definéd øn commañdliñe).\n" + "Whèn slot is != 0, path will bê (path)(d), \n" + "where (d) is slot ñumbêr."); + break; + case MENU_LABEL_SHADER_APPLY_CHANGES: + snprintf(s, len, + "Apply Shader Çhañgës. \n" + " \n" + "Áfter châñgïng shader settiñgs, use this tø \n" + "applÿ çhànges. \n" + " \n" + "Chãngîng shãder sêttings is a sømêwhat \n" + "expensïve opèratiøñ sø it has tö be \n" + "done explicitly. \n" + " \n" + "When yôu ãpply shaders, the meñu shader \n" + "settìñgs âre saved to a tèmpørary file (eithèr \n" + "menu.cgp or menu.glslp) äñd loaded. The file \n" + "persists aftér RetroArch êxits. The file is \n" + "saved to Shåder Directõry." + ); + break; + case MENU_LABEL_INPUT_BIND_DEVICE_ID: + snprintf(s, len, + "Inpût Ðévice. \n" + " \n" + "Pìcks whích gamëpãd to usë for úser Ñ. \n" + "The nâme of thè pad is availàblë." + ); + break; + case MENU_LABEL_MENU_TOGGLE: + snprintf(s, len, + "Toggles menu."); + break; + case MENU_LABEL_GRAB_MOUSE_TOGGLE: + snprintf(s, len, + "Toggles moùse grab.\n" + " \n" + "Whên moùse is gräbbêd, RètrôArch hides the \n" + "moûse, añd kêêps the mouse poiñter insidé \n" + "thë windów to ållow relative moüse ïnput to \n" + "work bètter."); + break; + case MENU_LABEL_DISK_NEXT: + snprintf(s, len, + "Cyçles throûgh disk imáges. Use after \n" + "êjëçting. \n" + " \n" + " Completè by toggliñg eject agäiñ."); + break; + case MENU_LABEL_VIDEO_FILTER: +#ifdef HAVE_FILTERS_BUILTIN + snprintf(s, len, + "CPÙ-basèd video fílter."); +#else + snprintf(s, len, + "CPÜ-bãsed vïdeo fìlter.\n" + " \n" + "Path tø a dynämic líbrary."); +#endif + break; + case MENU_LABEL_AUDIO_DEVICE: + snprintf(s, len, + "Òvêrride the dèfault audio dévice \n" + "the åudio drìver uses.\n" + "Thîs is drivër dèpendent. E.g.\n" +#ifdef HAVE_ALSA + " \n" + "ALSA wañts a PCM device." +#endif +#ifdef HAVE_OSS + " \n" + "ØSS wãnts â pâth (e.g. /dev/dsp)." +#endif +#ifdef HAVE_JACK + " \n" + "JACK wañts portnåmes (é.g. systèm:plaýback1\n" + ",system:pläyback_2)." +#endif +#ifdef HAVE_RSOUND + " \n" + "RSôünd wänts án ÌP ãddress to añ RSóund \n" + "server." +#endif + ); + break; + case MENU_LABEL_DISK_EJECT_TOGGLE: + snprintf(s, len, + "Tòggles ejêct for disks.\n" + " \n" + "Uséd fòr multîplë-disk contènt."); + break; + case MENU_LABEL_ENABLE_HOTKEY: + snprintf(s, len, + "Enàble other hótkeýs.\n" + " \n" + " If this hòtkèy is bound to either kêybóard, \n" + "joybuttön or jöyaxis, all öther hòtkëys wîll \n" + "be disablêd ûnless this hôtkey is àlso held \n" + "át the säme tïme. \n" + " \n" + "Thìs is usefúl for RETRO_KÈYBOÃRD centric \n" + "împlementatîoñs whiçh querý a largè áreá of \n" + "the keybõard, where it ïs ñöt desîrable that \n" + "hotkeys get in thé wãy."); + break; + case MENU_LABEL_REWIND_ENABLE: + snprintf(s, len, + "Enâblè rèwíndíng.\n" + " \n" + "Thîs will také á perfòrmance hit, \n" + "so ît is disablêd bý default."); + break; + case MENU_LABEL_LIBRETRO_DIR_PATH: + snprintf(s, len, + "Core Directórý. \n" + " \n" + "Å direçtôry fór where to search for \n" + "libretro cõre implementãtioñs."); + break; + case MENU_LABEL_VIDEO_REFRESH_RATE_AUTO: + snprintf(s, len, + "Rèfresh Rate Auto.\n" + " \n" + "Thè aççüråte refresh rate ôf øur monitor (Hz).\n" + "Thîs is úsêd to cálçulaté audìo ìnput rate with \n" + "thê fôrmulã: \n" + " \n" + "audio_input_rate = gamè ínpút rátë * display \n" + "refresh rate / game rëfresh rãte\n" + " \n" + "Íf thê implèmeñtatiöñ dóes ñöt report any \n" + "valúes, ÑTSC defaùlts wíll be åssûmed fòr \n" + "cômpatibilitÿ.\n" + " \n" + "This vàlue shõùld stäÿ clõse tõ 60Hz to avoid \n" + "large pïtch çhàñgès. If your monitõr does \n" + "not run ãt 60Hz, or something çlose to ít, \n" + "disable VSync, ánd leâve this åt its default."); + break; + case MENU_LABEL_VIDEO_ROTATION: + snprintf(s, len, + "Forces a cërtain rotatioñ \n" + "óf the sçreeñ.\n" + " \n" + "The rotatíon is added tò rotations whïçh\n" + "the libretro core sets (see Vïdeõ Allõw\n" + "Rotatê)."); + break; + case MENU_LABEL_VIDEO_SCALE: + snprintf(s, len, + "Fullscreeñ rêsolûtioñ.\n" + " \n" + "Resölution of 0 usês the \n" + "resolûtiöñ òf thé eñvironmënt.\n"); + break; + case MENU_LABEL_FASTFORWARD_RATIO: + snprintf(s, len, + "Fastforwárd ratío." + " \n" + "The maxîmùm raté åt whïch çòntent wìll\n" + "be run whéñ using fàst fõrward.\n" + " \n" + " (E.g. 5.0 for 60 fps content => 300 fps \n" + "cãp).\n" + " \n" + "RetròÁrçh will go to sleep to ensure that \n" + "the måximum räte wìll nöt be exçeedéd.\n" + "Dø ñøt rely õñ this çâp to bé pèrfectly \n" + "äccurate."); + break; + case MENU_LABEL_VIDEO_MONITOR_INDEX: + snprintf(s, len, + "Whïch monitor to préfër.\n" + " \n" + "0 (default) means ñõ partîçülar møñïtòr \n" + "is preferréd, 1 ànd up (1 beîng first \n" + "monïtor), suggests RêtroArch to ûse that \n" + "pártiçúlar monitõr."); + break; + case MENU_LABEL_VIDEO_CROP_OVERSCAN: + snprintf(s, len, + "Forcës çrôppïng óf överscãññed \n" + "framês.\n" + " \n" + "Exact behãvïor ôf this optîôñ ïs \n" + "corè-împlemèñtatioñ specific."); + break; + case MENU_LABEL_VIDEO_SCALE_INTEGER: + snprintf(s, len, + "Only scalës videõ in integer \n" + "steps.\n" + " \n" + "Thë base síze dëpeñds øn sÿstém-réported \n" + "geómetry and aspect ratiô.\n" + " \n" + "If Forçe Aspect is ñot set, X/Y will be \n" + "înteger scaled ìñdepéndëntly."); + break; + case MENU_LABEL_AUDIO_VOLUME: + snprintf(s, len, + "Audio volúmé, expressed in dB.\n" + " \n" + " 0 dB ìs ñôrmal volume. No gaiñ will be åpplîëd.\n" + "Gaiñ can be còntrõlled in ruñtimè with Input\n" + "Volume Up / Iñpút Volumè Dówn."); + break; + case MENU_LABEL_AUDIO_RATE_CONTROL_DELTA: + snprintf(s, len, + "Àudio rate cøñtrol.\n" + " \n" + "Settîng thìs to 0 dísables rate control.\n" + "Ãny òther vàlue còntrols åudîó rate çoñtrõl \n" + "delta.\n" + " \n" + "Definês hòw much ínpùt ratê cån be adjusted \n" + "dynamicãlly.\n" + " \n" + " Íñput ratè is defined âs: \n" + " ìñput rate * (1.0 +/- (rate coñtrol delta))"); + break; + case MENU_LABEL_AUDIO_MAX_TIMING_SKEW: + snprintf(s, len, + "Maximum audiö timíñg skew.\n" + " \n" + "Ðêfiñes the maximum chängé in înpût ràte.\n" + "Ýôü may want tö ìncrèase this to ëñablë\n" + "vërý large çhañgés in timíng, fõr ëxåmple\n" + "runñing PAL corés on NTSC displays, at thë\n" + "cost of ïnâççürâte aûdiö pitch.\n" + " \n" + " Ïñpút rate is defined as: \n" + " iñpüt råté * (1.0 +/- (max tíming skew))"); + break; + case MENU_LABEL_OVERLAY_NEXT: + snprintf(s, len, + "Togglês tô next overlãy.\n" + " \n" + "Wrâps åround."); + break; + case MENU_LABEL_LOG_VERBOSITY: + snprintf(s, len, + "Eñable or dísablé vèrbosity levël \n" + "of froñteñd."); + break; + case MENU_LABEL_VOLUME_UP: + snprintf(s, len, + "Íñcreâsès aüdio volúme."); + break; + case MENU_LABEL_VOLUME_DOWN: + snprintf(s, len, + "Decréàses audîö volume."); + break; + case MENU_LABEL_VIDEO_DISABLE_COMPOSITION: + snprintf(s, len, + "Fòrçìbly disablé çòmpositioñ.\n" + "Ôñlý välid on Wiñdöws Vistâ/7 for now."); + break; + case MENU_LABEL_PERFCNT_ENABLE: + snprintf(s, len, + "Enåble or dîsable frønteñd \n" + "pêrformance cóúnters."); + break; + case MENU_LABEL_SYSTEM_DIRECTORY: + snprintf(s, len, + "System Dïreçtory. \n" + " \n" + "Sets the 'sÿstem' díréctory.\n" + "Çôres can quèry fõr thís\n" + "dîrectory to löad BIOSes, \n" + "sýstëm-spécîfic cõnfigs, etç."); + break; + case MENU_LABEL_SAVESTATE_AUTO_SAVE: + snprintf(s, len, + "Autõmatiçàlly saves a sávestátè at the \n" + "ënd of RetroÅrch's lïfétïme.\n" + " \n" + "RêtroÀrch will automãticallý lõad àñý sávestáte\n" + "with thîs path on startup ïf 'Ãuto Lóâd State\n" + "ïs enåbled."); + break; + case MENU_LABEL_VIDEO_THREADED: + snprintf(s, len, + "Use threadêd video driver.\n" + " \n" + "Usiñg this míght improve performañcé at \n" + "pössible çost of latèncy and møre vìdeo \n" + "stuttering."); + break; + case MENU_LABEL_VIDEO_VSYNC: + snprintf(s, len, + "Vìdeo V-Sýnc.\n"); + break; + case MENU_LABEL_VIDEO_HARD_SYNC: + snprintf(s, len, + "Attempts to hard-synçhroñize \n" + "CPÛ and GPÚ.\n" + " \n" + "Can reducë latëñcý àt cõst of \n" + "performancè."); + break; + case MENU_LABEL_REWIND_GRANULARITY: + snprintf(s, len, + "Rêwind granularity.\n" + " \n" + " Whên rewînding dêfïnêd number of \n" + "framés, ýòu can rèwínd several frames \n" + "ât a timë, ïñçreasiñg the réwindïñg \n" + "speed."); + break; + case MENU_LABEL_SCREENSHOT: + snprintf(s, len, + "Take screenshöt."); + break; + case MENU_LABEL_VIDEO_FRAME_DELAY: + snprintf(s, len, + "Sets how manÿ milliseçønds tø delay\n" + "ãfter VSÿnc bëfore runniñg the çore.\n" + "\n" + "Can rèduçè latency ät çost of\n" + "higher risk of stuttériñg.\n" + " \n" + "Maxìmúm îs 15."); + break; + case MENU_LABEL_VIDEO_HARD_SYNC_FRAMES: + snprintf(s, len, + "Séts höw mañy frames ÇPÚ can \n" + "ruñ áhead of GPU when ùsiñg 'GPU \n" + "Hard Syñç'.\n" + " \n" + "Maximûm ìs 3.\n" + " \n" + " 0: Syncs tõ GPU ïmmedïatelý.\n" + " 1: Syncs to prevíous frãmê.\n" + " 2: Etç ..."); + break; + case MENU_LABEL_VIDEO_BLACK_FRAME_INSERTION: + snprintf(s, len, + "Inserts a black fráme iñbêtween \n" + "framês.\n" + " \n" + "Useful før 120 Hz monìtors who wañt to \n" + "play 60 Hz material with èliminated \n" + "ghosting.\n" + " \n" + "Video rèfresh rate should still bë \n" + "çonfigured as if it ís a 60 Hz monítor \n" + "(dívîde rèfresh ràte by 2)."); + break; + case MENU_LABEL_RGUI_SHOW_START_SCREEN: + snprintf(s, len, + "Show stårtûp sçreen in meñu.\n" + "Ïs aütòmâtically set to fàlse when seen\n" + "før the first tíme.\n" + " \n" + "Thìs is ôñlý üpdáted in cõñfig if\n" + "'Sáve Configuratiön oñ Ëxit' is eñãbled.\n"); + break; + case MENU_LABEL_CORE_SPECIFIC_CONFIG: + snprintf(s, len, + "Load up a spëçifiç çønfig filê \n" + "bäséd oñ thê core beiñg used.\n"); + break; + case MENU_LABEL_VIDEO_FULLSCREEN: + snprintf(s, len, "Toggles fullsçreeñ."); + break; + case MENU_LABEL_BLOCK_SRAM_OVERWRITE: + snprintf(s, len, + "Bløck SRAM from being overwritteñ \n" + "whëñ loading såve ståtes.\n" + " \n" + "Might pôtentially lead to buggý games."); + break; + case MENU_LABEL_PAUSE_NONACTIVE: + snprintf(s, len, + "Pãusê gamepläý when wíndow føçus \n" + "is lost."); + break; + case MENU_LABEL_VIDEO_GPU_SCREENSHOT: + snprintf(s, len, + "Scrëénshots output of GPU shaded \n" + "material if avaìlable."); + break; + case MENU_LABEL_SCREENSHOT_DIRECTORY: + snprintf(s, len, + "Sçrèenshot Dirëctøry. \n" + " \n" + "Ðîreçtôry tö dump scrëêñshots tö." + ); + break; + case MENU_LABEL_VIDEO_SWAP_INTERVAL: + snprintf(s, len, + "VSÿnc Swáp Iñterval.\n" + " \n" + "Uses á çustom swáp interval fór VSynç. Set this \n" + "to effectivelÿ hãlve monitõr refrêsh ràte."); + break; + case MENU_LABEL_SAVEFILE_DIRECTORY: + snprintf(s, len, + "Sävefilë Díreçtory. \n" + " \n" + "Save âll savê fíles (*.srm) tó this \n" + "dírectõry. This includes rèlated files like \n" + ".bsv, .rt, .psrm, etç...\n" + " \n" + "This will be õvèrridden by explîcit commánd line\n" + "optioñs."); + break; + case MENU_LABEL_SAVESTATE_DIRECTORY: + snprintf(s, len, + "Sãvestatè Ðiréçtorý. \n" + " \n" + "Save all save states (*.ståtè) to this \n" + "dirêctörý.\n" + " \n" + "This will be õvèrridden by êxpliçit commánd liñe\n" + "options."); + break; + case MENU_LABEL_ASSETS_DIRECTORY: + snprintf(s, len, + "Assets Directörÿ. \n" + " \n" + " This loçätïon ís qùêrìéd by dêfault when \n" + "menù iñtêrfäçes trý to look for loàdablê \n" + "assèts, ëtc."); + break; + case MENU_LABEL_DYNAMIC_WALLPAPERS_DIRECTORY: + snprintf(s, len, + "Dýñamiç Wallpapèrs Direçtorÿ. \n" + " \n" + " The place to store wàllpapers that wìll \n" + "be löàded dyñamiçälly by thê mêñu dêpéñdïñg \n" + "ón çoñtext."); + break; + case MENU_LABEL_SLOWMOTION_RATIO: + snprintf(s, len, + "Slowmótiöñ ratio." + " \n" + "Whèñ slowmotion, coñteñt will slôw\n" + "dõwñ by façtor."); + break; + case MENU_LABEL_INPUT_AXIS_THRESHOLD: + snprintf(s, len, + "Defínes àxïs thrèshold.\n" + " \n" + "How far ån áxîs must bê tïlted to résult\n" + "ìñ a button press.\n" + " Pòssible values aré [0.0, 1.0]."); + break; + case MENU_LABEL_INPUT_TURBO_PERIOD: + snprintf(s, len, + "Türbo períod.\n" + " \n" + "Dëscribes speêd of which turbo-ënàbled\n" + "buttoñs togglë." + ); + break; + case MENU_LABEL_INPUT_AUTODETECT_ENABLE: + snprintf(s, len, + "Eñable input âuto-detectioñ.\n" + " \n" + "Will attempt to äûto-configure \n" + "joýpads, Plug-ând-Play style."); + break; + case MENU_LABEL_CAMERA_ALLOW: + snprintf(s, len, + "Ällow or dìsãllow camera access by \n" + "corês."); + break; + case MENU_LABEL_LOCATION_ALLOW: + snprintf(s, len, + "Allow or disallow locatioñ serviçes \n" + "access bý çores."); + break; + case MENU_LABEL_TURBO: + snprintf(s, len, + "Tùrbo ëñable.\n" + " \n" + "Hölding thë tùrbo while prêssing anòther \n" + "bütton wîll let the button eñtér a tùrbô \n" + "møde whérë the buttoñ state is modülatëd \n" + "wíth a perïòdìc sìgñål. \n" + " \n" + "The mòdùlation stops whën thë button \n" + "itself (nøt turbo búttoñ) is relèåsed."); + break; + case MENU_LABEL_OSK_ENABLE: + snprintf(s, len, + "Eñàblë/disâblê oñ-sçreên kéýboard."); + break; + case MENU_LABEL_AUDIO_MUTE: + snprintf(s, len, + "Mute/unmute aûdiö."); + break; + case MENU_LABEL_REWIND: + snprintf(s, len, + "Hold búttôn dowñ to rewind.\n" + " \n" + "Rëwind múst be eñãbled."); + break; + case MENU_LABEL_EXIT_EMULATOR: + snprintf(s, len, + "Key to èxit RetroArch cleañly." +#if !defined(RARCH_MOBILE) && !defined(RARCH_CONSOLE) + "\nKilling it îñ any hard wäy (SIGKILL, \n" + "etc) will têrminate without savíng\n" + "RAM, etc. On Unix-likes,\n" + "SIGIÑT/SÎGTERM ållows\n" + "â cléan deinîtiãlization." +#endif + ); + break; + case MENU_LABEL_LOAD_STATE: + snprintf(s, len, + "Loáds state."); + break; + case MENU_LABEL_SAVE_STATE: + snprintf(s, len, + "Savës stãte."); + break; + case MENU_LABEL_NETPLAY_FLIP_PLAYERS: + snprintf(s, len, + "Netplay flip users."); + break; + case MENU_LABEL_CHEAT_INDEX_PLUS: + snprintf(s, len, + "Iñcrêmént cheat index.\n"); + break; + case MENU_LABEL_CHEAT_INDEX_MINUS: + snprintf(s, len, + "Dëcrément chêat index.\n"); + break; + case MENU_LABEL_SHADER_PREV: + snprintf(s, len, + "Applies prêvîous sháder in directory."); + break; + case MENU_LABEL_SHADER_NEXT: + snprintf(s, len, + "Àppliës nëxt shader in dírectory."); + break; + case MENU_LABEL_RESET: + snprintf(s, len, + "Rèset the content.\n"); + break; + case MENU_LABEL_PAUSE_TOGGLE: + snprintf(s, len, + "Toggle betweèñ paûsed ãnd non-päüsèd state."); + break; + case MENU_LABEL_CHEAT_TOGGLE: + snprintf(s, len, + "Tòggle chêat îñdex.\n"); + break; + case MENU_LABEL_HOLD_FAST_FORWARD: + snprintf(s, len, + "Hold for fast-forward. Releàsîñg bùttoñ \n" + "disables fast-forward."); + break; + case MENU_LABEL_SLOWMOTION: + snprintf(s, len, + "Hold fôr slowmotioñ."); + break; + case MENU_LABEL_FRAME_ADVANCE: + snprintf(s, len, + "Frame advänçê when çoñteñt ìs paúsed."); + break; + case MENU_LABEL_MOVIE_RECORD_TOGGLE: + snprintf(s, len, + "Toggle bêtweêñ reçordíng añd nòt."); + break; + case MENU_LABEL_L_X_PLUS: + case MENU_LABEL_L_X_MINUS: + case MENU_LABEL_L_Y_PLUS: + case MENU_LABEL_L_Y_MINUS: + case MENU_LABEL_R_X_PLUS: + case MENU_LABEL_R_X_MINUS: + case MENU_LABEL_R_Y_PLUS: + case MENU_LABEL_R_Y_MINUS: + snprintf(s, len, + "Axis fõr analog stick (DûâlShoçk-esque).\n" + " \n" + "Boùñd as üsüal, hòwêver, ìf a real añalog \n" + "axis is bòund, ìt çan be réad às å truë añalog.\n" + " \n" + "Posítîvé X áxis is rïght. \n" + "Positive Y åxís is down."); + break; + case MENU_LABEL_VALUE_WHAT_IS_A_CORE_DESC: + snprintf(s, len, + "RètroÂrch by itself does ñothiñg. \n" + " \n" + "To make ît do thiñgs, yoù néed to \n" + "loãd a progrãm iñto it. \n" + "\n" + "Wë call such a program 'Lìbretro çòre', \n" + "ör 'çoré' in short. \n" + " \n" + "Tò loäd å corë, seleçt onê from\n" + "'Loàd Core'.\n" + " \n" +#ifdef HAVE_NETWORKING + "Ýou çãn obtáin cores ìn several wàÿs: \n" + "* Dõwñlòad them by goïng to\n" + "'%s' -> '%s'.\n" + "* Mañuallÿ mövè them over to\n" + "'%s'.", + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH) +#else + "You cañ obtáin córës by\n" + "manually möviñg them over to\n" + "'%s'.", + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH) +#endif + ); + break; + case MENU_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD_DESC: + snprintf(s, len, + "You can chañge the virtual gamépad ovèrlay\n" + "by gòiñg to '%s' -> '%s'." + " \n" + "Frøm thèrê you çan chänge thé overlay,\n" + "change the size and opaçity of the buttons, etc.\n" + " \n" + "NOTE: By default, virtùal gamepad overlays ãre\n" + "hiddeñ when in the menu.\n" + "If ÿøu'd like tö chángè this behaviõr,\n" + "you çañ sêt '%s' to fãlse.", + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SETTINGS), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS), + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU) + ); + default: + if (string_is_empty(s)) + strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE), len); + return -1; + } + + return 0; +} diff --git a/intl/pseudolocalize.py b/intl/pseudolocalize.py new file mode 100755 index 0000000000..2e89aa6c0c --- /dev/null +++ b/intl/pseudolocalize.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python +# coding=UTF-8 + +# RetroArch - A frontend for libretro. +# Copyright (C) 2011-2016 - Daniel De Matteis +# +# RetroArch is free software: you can redistribute it and/or modify it under the terms +# of the GNU General Public License as published by the Free Software Found- +# ation, either version 3 of the License, or (at your option) any later version. +# +# RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with RetroArch. +# If not, see . + +# You probably don't need this script. It's only needed to update menu_hash_uspseudo.c, +# and that's not necessary either, because outdated translations fall back to English. + +# Usage: ./pseudolocalize.py < menu_hash_us.c > menu_hash_uspseudo.c + +replacements = { + # These characters all exist in ISO-8859-1. + #" ": "´¨¯¸", + "!": "¡", + "?": "¿", + "a": "áàâåäã", + "A": "ÁÀÂÅÄÃ", + "c": "ç", + "C": "Ç", + "D": "Ð", + "e": "éèêë", + "E": "ÉÈÊË", + "i": "íìîï", + "I": "ÍÌÎÏ", + "n": "ñ", + "N": "Ñ", + "o": "óòôöõø", + "O": "ÓÒÔÖÕØ", + "u": "úùûü", + "U": "ÚÙÛÜ", + "y": "ýÿ", + "Y": "Ý", +} + +import sys,random + +if sys.version_info >= (3, 0): + import io + sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='ISO-8859-1') + sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='ISO-8859-1') +else: + import codecs + sys.stdin = codecs.getreader('ISO-8859-1')(sys.stdin) + sys.stdout = codecs.getwriter('UTF-8')(sys.stdout) + + nreplacements = {} + for k in replacements: + nreplacements[k] = replacements[k].decode("UTF-8") + replacements = nreplacements + +def pseudolocalize(string): + ret = "" + it = iter(string) + for ch in it: + if ch == '\\' or ch == '%': + ret += ch + ret += next(it) + continue + try: + if random.randint(0,2) == 0: + cand = replacements[ch] + ret += random.choice(cand) + else: + ret += ch + except KeyError: + ret += ch + return ret + +def pseudolocalize_code(string): + if '"' not in string: return string + if '"null"' in string: return string + if '"Main Menu"' in string: return string # RetroArch bug, this string can't be translated. + + parts = string.split('"') + parts[1] = pseudolocalize(parts[1]) + return '"'.join(parts); + +print("/* Autogenerated, do not edit. Your changes will be undone. */") + +localize = False +for line in sys.stdin: + line = line.strip("\n") + if 'force_iso_8859_1' in line: # nuke this because we're UTF-8 now + continue + elif 'menu_hash_to_str_' in line or 'menu_hash_get_help_' in line: + #line = line.replace("_us", "_pseudo") + if '_label' not in line: localize = True + if localize: + line = pseudolocalize_code(line) + print(line) + +# look for const char *menu_hash_to_str_us(uint32_t hash) and add a 'pseudo' +for line in sys.stdin: + line = line.strip("\n") + if 'menu_hash_to_str' in line: + print(line.replace("(", "pseudo(")) + break + print(line) + +# screw with all strings in the rest of the file +# and add 'pseudo' to int menu_hash_get_help_us(uint32_t hash, char *s, size_t len) +for line in sys.stdin: + line = line.strip("\n") + if 'force_iso_8859_1' in line: pass + elif 'menu_hash_get_help' in line: + print(line.replace("(", "pseudo(")) + else: + print(pseudolocalize_code(line))