diff --git a/yabause/src/android/jni/yui.cpp b/yabause/src/android/jni/yui.cpp index 132eee3792..b029bf1a2b 100644 --- a/yabause/src/android/jni/yui.cpp +++ b/yabause/src/android/jni/yui.cpp @@ -1254,6 +1254,7 @@ int YabauseInit(){ yinit.cdcoretype = CDCORE_ISO; yinit.carttype = GetCartridgeType(); yinit.regionid = 0; + yinit.syslanguageid = 0; yinit.biospath = s_biospath; yinit.cdpath = s_cdpath; diff --git a/yabause/src/cocoa/YabauseController.m b/yabause/src/cocoa/YabauseController.m index fa7291bfc7..14db773b83 100644 --- a/yabause/src/cocoa/YabauseController.m +++ b/yabause/src/cocoa/YabauseController.m @@ -256,6 +256,7 @@ - (void)startEmulationWithCDCore:(int)cdcore CDPath:(const char *)fn yinit.cdcoretype = cdcore; yinit.carttype = [prefs cartType]; yinit.regionid = [prefs region]; + yinit.syslanguageid = [prefs system language]; yinit.biospath = ([bios length] > 0 && ![prefs emulateBios]) ? [bios UTF8String] : NULL; yinit.cdpath = fn; diff --git a/yabause/src/dreamcast/yui.c b/yabause/src/dreamcast/yui.c index f6c539bab6..488c1ee1f3 100644 --- a/yabause/src/dreamcast/yui.c +++ b/yabause/src/dreamcast/yui.c @@ -87,6 +87,7 @@ int YuiInit(int sh2core) { yinit.cdcoretype = CDCORE_ARCH; yinit.carttype = CART_NONE; yinit.regionid = REGION_AUTODETECT; + yinit.syslanguageid = 0; yinit.biospath = emulate_bios ? NULL : bios; yinit.cdpath = NULL; yinit.buppath = NULL; diff --git a/yabause/src/glfw/main.cpp b/yabause/src/glfw/main.cpp index e487bb94d1..2ec74967f6 100644 --- a/yabause/src/glfw/main.cpp +++ b/yabause/src/glfw/main.cpp @@ -230,6 +230,7 @@ int yabauseinit() yinit.cdcoretype = CDCORE_ISO; yinit.carttype = CART_NONE; yinit.regionid = 0; + yinit.syslanguageid = 0; yinit.biospath = biospath; yinit.cdpath = cdpath; yinit.buppath = buppath; diff --git a/yabause/src/gtk/main.c b/yabause/src/gtk/main.c index cd10adac92..a8d5d4ea36 100644 --- a/yabause/src/gtk/main.c +++ b/yabause/src/gtk/main.c @@ -131,6 +131,11 @@ GtkWidget * yui; GKeyFile * keyfile; yabauseinit_struct yinit; +char* toLower(char* s) { + for(char *p=s; *p; p++) *p=tolower(*p); + return s; +} + static int yui_main(gpointer data) { PERCore->HandleEvents(); return TRUE; @@ -158,6 +163,7 @@ static void yui_settings_init(void) { yinit.carttype = CART_NONE; yinit.regionid = 0; yinit.biospath = biospath; + yinit.syslanguageid = 0; yinit.cdpath = cdpath; yinit.buppath = buppath; yinit.mpegpath = mpegpath; @@ -222,6 +228,28 @@ static gboolean yui_settings_load(void) { Cs2ChangeCDCore(yinit.cdcoretype, yinit.cdpath); } + /* SystemLanguageID */ + { + char * syslang = g_key_file_get_value(keyfile, "General", "SystemLanguageID", 0); + tmp = yinit.syslanguageid; + if ((syslang == 0) || !strcmp(syslang, "0")) { + yinit.syslanguageid = 0; + } else { + switch(syslang[0]) { + case '0': yinit.syslanguageid = 0; break; + case '1': yinit.syslanguageid = 1; break; + case '2': yinit.syslanguageid = 2; break; + case '3': yinit.syslanguageid = 3; break; + case '4': yinit.syslanguageid = 4; break; + case '5': yinit.syslanguageid = 5; break; + } + } + + if ((YUI_WINDOW(yui)->state & YUI_IS_INIT) && (tmp != yinit.syslanguageid)) { + mustRestart = TRUE; + } + } + /* region */ { char * region = g_key_file_get_value(keyfile, "General", "Region", 0); @@ -490,6 +518,24 @@ int main(int argc, char *argv[]) { g_strlcpy(biospath, argv[i] + strlen("--bios="), 256); yinit.biospath = biospath; } + //set System Language + if (0 == strcmp(argv[i], "-l") && argv[i + 1]) { + g_strlcpy(strsyslangeid, argv[i + 1], 256); + if (toLower(strsyslangeid) == "english") { yinit.syslanguageid = 0; } + if (toLower(strsyslangeid) == "deutsch") { yinit.syslanguageid = 1; } + if (toLower(strsyslangeid) == "french") { yinit.syslanguageid = 2; } + if (toLower(strsyslangeid) == "spanish") { yinit.syslanguageid = 3; } + if (toLower(strsyslangeid) == "italian") { yinit.syslanguageid = 4; } + if (toLower(strsyslangeid) == "japanese") { yinit.syslanguageid = 5; } + } else if (strstr(argv[i], "--language=")) { + g_strlcpy(strsyslangeid, argv[i] + strlen("--language="), 256); + if (toLower(strsyslangeid) == "english") { yinit.syslanguageid = 0; } + if (toLower(strsyslangeid) == "deutsch") { yinit.syslanguageid = 1; } + if (toLower(strsyslangeid) == "french") { yinit.syslanguageid = 2; } + if (toLower(strsyslangeid) == "spanish") { yinit.syslanguageid = 3; } + if (toLower(strsyslangeid) == "italian") { yinit.syslanguageid = 4; } + if (toLower(strsyslangeid) == "japanese") { yinit.syslanguageid = 5; } + } //set iso else if (0 == strcmp(argv[i], "-i") && argv[i + 1]) { g_strlcpy(cdpath, argv[i + 1], 256); diff --git a/yabause/src/gtk/settings.c b/yabause/src/gtk/settings.c index d07056e588..808c4ab750 100644 --- a/yabause/src/gtk/settings.c +++ b/yabause/src/gtk/settings.c @@ -80,6 +80,16 @@ YuiRangeItem * osdcores = NULL; YuiRangeItem * sndcores = NULL; YuiRangeItem * percores = NULL; +YuiRangeItem syslanguage[] = { + { "0" , "English" }, + { "1" , "Deutsch" }, + { "2" , "French" }, + { "3" , "Spanish" }, + { "4" , "Italian" }, + { "5" , "Japanese" }, + { 0, 0 } +}; + YuiRangeItem regions[] = { { "Auto" , "Auto-detect" }, { "J" , "Japan (NTSC)" }, @@ -324,7 +334,10 @@ GtkWidget* create_dialog1(void) { box = yui_page_add(YUI_PAGE(general), _("Save States")); gtk_container_add(GTK_CONTAINER(box), yui_file_entry_new(keyfile, "General", "StatePath", YUI_FILE_ENTRY_BROWSE | YUI_FILE_ENTRY_DIRECTORY, NULL)); - + + box = yui_page_add(YUI_PAGE(general), _("System Language")); + gtk_container_add(GTK_CONTAINER(box), yui_range_new(keyfile, "General", "SystemLanguageID", syslanguage)); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook1), general, gtk_label_new (_("General"))); gtk_widget_show_all(general); diff --git a/yabause/src/ios/yui.cpp b/yabause/src/ios/yui.cpp index 6f9c0783d9..fa9064048a 100644 --- a/yabause/src/ios/yui.cpp +++ b/yabause/src/ios/yui.cpp @@ -159,6 +159,7 @@ int start_emulation( int originx, int originy, int width, int height ){ yinit.sndcoretype = SNDCORE_AL; //SNDCORE_DEFAULT; yinit.cdcoretype = CDCORE_ISO; yinit.regionid = 0; + yinit.syslanguageid = 0; yinit.biospath = s_biospath; yinit.cdpath = s_cdpath; @@ -321,4 +322,4 @@ int start_emulation( int originx, int originy, int width, int height ){ return 0; } -} \ No newline at end of file +} diff --git a/yabause/src/libretro/libretro.c b/yabause/src/libretro/libretro.c index bdafa0bdd3..054bd1cf95 100644 --- a/yabause/src/libretro/libretro.c +++ b/yabause/src/libretro/libretro.c @@ -41,6 +41,7 @@ static char g_system_dir[PATH_MAX]; static char full_path[PATH_MAX]; static char bios_path[PATH_MAX]; static char bup_path[PATH_MAX]; +static int system_language = 0; static int game_width = 320; static int game_height = 240; @@ -101,6 +102,7 @@ void retro_set_environment(retro_environment_t cb) { "yabasanshiro_force_hle_bios", "Force HLE BIOS (restart, deprecated, debug only); disabled|enabled" }, { "yabasanshiro_frameskip", "Auto-frameskip (prevent fast-forwarding); enabled|disabled" }, { "yabasanshiro_addon_cart", "Addon Cartridge (restart); 4M_extended_ram|1M_extended_ram" }, + { "yabasanshiro_system_language", "System Language (restart); english|deutsch|french|spanish|italian|japanese" }, { "yabasanshiro_multitap_port1", "6Player Adaptor on Port 1; disabled|enabled" }, { "yabasanshiro_multitap_port2", "6Player Adaptor on Port 2; disabled|enabled" }, #ifdef DYNAREC_DEVMIYAX @@ -750,6 +752,24 @@ void check_variables(void) addon_cart_type = CART_DRAM32MBIT; } + var.key = "yabasanshiro_system_language"; + var.value = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "english") == 0) + system_language = 0; + else if (strcmp(var.value, "deutsch") == 0) + system_language = 1; + else if (strcmp(var.value, "french") == 0) + system_language = 2; + else if (strcmp(var.value, "spanish") == 0) + system_language = 3; + else if (strcmp(var.value, "italian") == 0) + system_language = 4; + else if (strcmp(var.value, "japanese") == 0) + system_language = 5; + } + var.key = "yabasanshiro_multitap_port1"; var.value = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) @@ -1253,6 +1273,7 @@ bool retro_load_game(const struct retro_game_info *info) yinit.cdcoretype = CDCORE_ISO; yinit.cdpath = full_path; yinit.biospath = (hle_bios_force ? NULL : bios_path); + yinit.syslanguageid = system_language; yinit.carttype = addon_cart_type; yinit.cartpath = "\0"; diff --git a/yabause/src/nx/main.cpp b/yabause/src/nx/main.cpp index c19474f028..7d7ee2a30a 100644 --- a/yabause/src/nx/main.cpp +++ b/yabause/src/nx/main.cpp @@ -112,6 +112,8 @@ void userAppExit() extern "C" { static char biospath[256] = "./yabasanshiro/bios.bin"; +static char strgsyslangeid[256] = "english"; +static int syslanguageid = 0; static char cdpath[256] = "./yabasanshiro/nights.cue"; //static char cdpath[256] = "/home/pigaming/RetroPie/roms/saturn/gd.cue"; //static char cdpath[256] = "/home/pigaming/RetroPie/roms/saturn/Virtua Fighter Kids (1996)(Sega)(JP).ccd"; @@ -201,6 +203,11 @@ string g_keymap_filename; #include "nanovg.h" +char* toLower(char* s) { + for(char *p=s; *p; p++) *p=tolower(*p); + return s; +} + //---------------------------------------------------------------------------------------------- NVGcontext * getGlobalNanoVGContext(){ return NULL; @@ -268,6 +275,7 @@ int yabauseinit() yinit.cdcoretype = CDCORE_ISO; yinit.carttype = CART_NONE; yinit.regionid = 0; + yinit.syslanguageid = syslanguageid; if( g_emulated_bios ){ yinit.biospath = NULL; }else{ @@ -421,6 +429,7 @@ int main(int argc, char** argv) if( all_args[0] == "-h" || all_args[0] == "--h" ){ printf("Usage:\n"); printf(" -b STRING --bios STRING bios file\n"); + printf(" -l STRING --language STRING english, deutsch, french, spanish,\n italian, japanese\n"); printf(" -i STRING --iso STRING iso/cue file\n"); printf(" -r NUMBER --resolution_mode NUMBER 0 .. Native, 1 .. 4x, 2 .. 2x, 3 .. Original\n"); printf(" -a --keep_aspect_rate\n"); @@ -436,6 +445,15 @@ int main(int argc, char** argv) if(( x == "-b" || x == "--bios") && (i+1[:ADDRESS]", "Use a binary file.", 1, binary }, { "-b", "--bios=", "", "Choose a bios file.", 3, bios }, + { "-l", "--language=", "","Choose the system language: english, deutsch, french, spanish, italian, japanese", 7, syslangid }, { "-c", "--cdrom=", "", "Choose the cdrom device.", 4, cdrom }, { "-f", "--fullscreen", NULL, "Start the emulator in fullscreen.", 5, fullscreen }, { "-p", "--playrecord", "", "Play play record.", 5, playRecord }, @@ -64,8 +66,8 @@ namespace Arguments void parse() { - QVector