Open yamanyandakure opened 10 years ago
I have been aware of this issue for a long time. It happens because EmulationStation uses custom text rendering code that only supports ASCII characters. I would like to add UTF-8 support - it supports Japanese characters, although it may take more space, and it would require the least amount of work. Would this work for you?
(No guarantee for how long it will take me to complete this.)
Thank you for your reply. It will wait for UTF-8 support without haste, and will wait for it. It tells other everybody Japanese so.
I'd also like to see UTF-8 support. I found the project this morning and it's exactly what I'd been looking for in a launcher - after trying others and finding them "too much" for what I wanted.
Thanks.
A progress update:
(the text in the description starts with üöä ß テスト During game play the player...
)
The text code has been updated to support glyphs in multiple textures, and now properly handles UTF-8 codepoints (cursors move left/right the appropriate number of bytes, reading the character at the cursor gets the right codepoint across multiple bytes). It also handles reinitialization after launching a game.
The Japanese characters show as squares because the default font does not have glyphs for them. I plan on adding a simple system to "fall back" to a known good font if the current font is missing a glyph.
These changes are on a separate utf8 branch. After I figure out the fallback font stuff and do some more testing, it will be merged with the unstable branch.
Another quick update:
(the missing boxes this time are Korean text, which I didn't have a working font for)
Here you can see ES loading glyphs from multiple fonts to handle the Japanese characters (which are missing from the description text box's font). Things seem to be working okay now.
The internal fallback font list just needs to be updated to include common Linux font paths, and then this needs to be tested on the Raspberry Pi to make sure I didn't degrade performance.
Excellent work @Aloshi :clap:
Looking forward to getting my hands on this when you get it out!
Thank you for UTF8 developing.
Although compile was tried on the raspberry pi, The 398th line of Font.ccp makes an error. Is it good although Fonts was set to FontPaths?
It was useless although added to the next at the 385th line. Characters without being displayed, that part will be white. "/usr/share/fonts/truetype/fonts-japanese-gothic.ttf",
It may be only my environment, but the display of Japanese is now available. But there is also a problem.
The following did not work. "/usr/share/fonts/truetype/fonts-japanese-gothic.ttf" I think the cause is because it's a link of a link.
It is a link of this file. "/etc/alternatives/fonts-japanese-gothic.ttf" However, this was also the link.
This file is the original file. "/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf"
"/usr/share/fonts/truetype/fonts-japanese-gothic.ttf" Instead of "/etc/alternatives/fonts-japanese-gothic.ttf" Or "/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf" It was confirmed that at it is displayed.
At the same, it was necessary to re-start after compilation.
I want to give thanks here to the came to form.
Hi, any chance to release beta version? Even partial display means lot to us. Or probably good idea to have CLI mode. So you don't have to get rushed for displaying all language's fonts.
Release will delay because we have discovered some crash bugs in the latest unicode build. Please be patient.
I believe I've fixed the crash bugs (sorry it took so long, school gets in the way).
If anyone would like to try out the Windows UTF-8 build, here you go. If you find a reproducible crash, running es_dump_on_crash.bat
and then making ES crash will create a memory dump that I can use to debug the crash. Expect bugs.
If someone is feeling brave, you can also try building it on the Raspberry Pi. Use git fetch origin utf8
and git checkout utf8
to switch to the utf8
branch, then compile as usual. I have not tested this at all.
looks great :)
Scanning dependencies of target nanosvg
[ 1%] Building CXX object external/nanosvg/CMakeFiles/nanosvg.dir/src/nanosvg_impl.cpp.o
In file included from /home/chad/EmulationStation/external/nanosvg/src/nanosvg_impl.cpp:5:0:
/home/chad/EmulationStation/external/nanosvg/nanosvg.h: In function ‘NSVGimage* nsvgParseFromFile(const char*, const char*, float)’:
/home/chad/EmulationStation/external/nanosvg/nanosvg.h:2507:26: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
fread(data, size, 1, fp);
^
Linking CXX static library ../../libnanosvg.a
[ 1%] Built target nanosvg
Scanning dependencies of target pugixml
[ 2%] Building CXX object external/pugixml/CMakeFiles/pugixml.dir/src/pugixml.cpp.o
Linking CXX static library ../../libpugixml.a
[ 2%] Built target pugixml
Scanning dependencies of target es-core
[ 3%] Building CXX object es-core/CMakeFiles/es-core.dir/src/AudioManager.cpp.o
[ 4%] Building CXX object es-core/CMakeFiles/es-core.dir/src/GuiComponent.cpp.o
[ 5%] Building CXX object es-core/CMakeFiles/es-core.dir/src/HelpStyle.cpp.o
[ 6%] Building CXX object es-core/CMakeFiles/es-core.dir/src/HttpReq.cpp.o
[ 7%] Building CXX object es-core/CMakeFiles/es-core.dir/src/ImageIO.cpp.o
[ 8%] Building CXX object es-core/CMakeFiles/es-core.dir/src/InputConfig.cpp.o
[ 9%] Building CXX object es-core/CMakeFiles/es-core.dir/src/InputManager.cpp.o
[ 9%] Building CXX object es-core/CMakeFiles/es-core.dir/src/Log.cpp.o
[ 10%] Building CXX object es-core/CMakeFiles/es-core.dir/src/platform.cpp.o
[ 11%] Building CXX object es-core/CMakeFiles/es-core.dir/src/Renderer_draw_gl.cpp.o
[ 12%] Building CXX object es-core/CMakeFiles/es-core.dir/src/Renderer_init.cpp.o
[ 13%] Building CXX object es-core/CMakeFiles/es-core.dir/src/Renderer_init_sdlgl.cpp.o
[ 14%] Building CXX object es-core/CMakeFiles/es-core.dir/src/Settings.cpp.o
[ 15%] Building CXX object es-core/CMakeFiles/es-core.dir/src/Sound.cpp.o
[ 16%] Building CXX object es-core/CMakeFiles/es-core.dir/src/ThemeData.cpp.o
[ 16%] Building CXX object es-core/CMakeFiles/es-core.dir/src/Util.cpp.o
[ 17%] Building CXX object es-core/CMakeFiles/es-core.dir/src/Window.cpp.o
[ 18%] Building CXX object es-core/CMakeFiles/es-core.dir/src/animations/AnimationController.cpp.o
[ 19%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/AnimatedImageComponent.cpp.o
[ 20%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/BusyComponent.cpp.o
[ 21%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/ButtonComponent.cpp.o
[ 22%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/ComponentGrid.cpp.o
[ 22%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/ComponentList.cpp.o
[ 23%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/DateTimeComponent.cpp.o
[ 24%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/HelpComponent.cpp.o
[ 25%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/ImageComponent.cpp.o
[ 26%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/MenuComponent.cpp.o
[ 27%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/NinePatchComponent.cpp.o
[ 28%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/ScrollableContainer.cpp.o
[ 29%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/SliderComponent.cpp.o
[ 29%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/SwitchComponent.cpp.o
[ 30%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/TextComponent.cpp.o
[ 31%] Building CXX object es-core/CMakeFiles/es-core.dir/src/components/TextEditComponent.cpp.o
[ 32%] Building CXX object es-core/CMakeFiles/es-core.dir/src/guis/GuiDetectDevice.cpp.o
[ 33%] Building CXX object es-core/CMakeFiles/es-core.dir/src/guis/GuiInputConfig.cpp.o
[ 34%] Building CXX object es-core/CMakeFiles/es-core.dir/src/guis/GuiMsgBox.cpp.o
[ 35%] Building CXX object es-core/CMakeFiles/es-core.dir/src/guis/GuiTextEditPopup.cpp.o
[ 36%] Building CXX object es-core/CMakeFiles/es-core.dir/src/resources/Font.cpp.o
[ 36%] Building CXX object es-core/CMakeFiles/es-core.dir/src/resources/ResourceManager.cpp.o
[ 37%] Building CXX object es-core/CMakeFiles/es-core.dir/src/resources/SVGResource.cpp.o
[ 38%] Building CXX object es-core/CMakeFiles/es-core.dir/src/resources/TextureResource.cpp.o
[ 39%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/ResourceUtil.cpp.o
[ 40%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/splash_svg.cpp.o
[ 41%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/window_icon_256_png.cpp.o
[ 42%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/button_png.cpp.o
[ 42%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/button_filled_png.cpp.o
[ 43%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/textinput_ninepatch_png.cpp.o
[ 44%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/textinput_ninepatch_active_png.cpp.o
[ 45%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/frame_png.cpp.o
[ 46%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/scroll_gradient_png.cpp.o
[ 47%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_button_a_svg.cpp.o
[ 48%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_button_b_svg.cpp.o
[ 49%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_button_x_svg.cpp.o
[ 49%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_button_y_svg.cpp.o
[ 50%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_button_l_svg.cpp.o
[ 51%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_button_r_svg.cpp.o
[ 52%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_button_start_svg.cpp.o
[ 53%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_button_select_svg.cpp.o
[ 54%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_dpad_up_svg.cpp.o
[ 55%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_dpad_down_svg.cpp.o
[ 56%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_dpad_left_svg.cpp.o
[ 56%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_dpad_right_svg.cpp.o
[ 57%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_dpad_updown_svg.cpp.o
[ 58%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_dpad_leftright_svg.cpp.o
[ 59%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/help_dpad_all_svg.cpp.o
[ 60%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/opensans_hebrew_condensed_regular_ttf.cpp.o
[ 61%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/opensans_hebrew_condensed_light_ttf.cpp.o
[ 62%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/arrow_svg.cpp.o
[ 62%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/option_arrow_svg.cpp.o
[ 63%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/checkbox_checked_svg.cpp.o
[ 64%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/checkbox_unchecked_svg.cpp.o
[ 65%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/star_filled_svg.cpp.o
[ 66%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/star_unfilled_svg.cpp.o
[ 67%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/on_svg.cpp.o
[ 68%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/off_svg.cpp.o
[ 69%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/fav_add_svg.cpp.o
[ 69%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/fav_remove_svg.cpp.o
[ 70%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/slider_knob_svg.cpp.o
[ 71%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/busy_0_svg.cpp.o
[ 72%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/busy_1_svg.cpp.o
[ 73%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/busy_2_svg.cpp.o
[ 74%] Building CXX object es-core/CMakeFiles/es-core.dir/__/data/converted/busy_3_svg.cpp.o
Linking CXX static library ../libes-core.a
[ 74%] Built target es-core
Scanning dependencies of target emulationstation
[ 74%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/FileData.cpp.o
[ 75%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/FileSorts.cpp.o
[ 76%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/main.cpp.o
[ 77%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/MameNameMap.cpp.o
[ 78%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/MetaData.cpp.o
[ 79%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/PlatformId.cpp.o
[ 80%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/ScraperCmdLine.cpp.o
[ 80%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/SystemData.cpp.o
[ 81%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/VolumeControl.cpp.o
[ 82%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/Gamelist.cpp.o
[ 83%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/components/AsyncReqComponent.cpp.o
[ 84%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/components/RatingComponent.cpp.o
[ 85%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/components/ScraperSearchComponent.cpp.o
[ 86%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/guis/GuiFastSelect.cpp.o
[ 87%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/guis/GuiMetaDataEd.cpp.o
[ 87%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/guis/GuiGameScraper.cpp.o
[ 88%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/guis/GuiGamelistOptions.cpp.o
[ 89%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/guis/GuiMenu.cpp.o
[ 90%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/guis/GuiSettings.cpp.o
[ 91%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/guis/GuiScraperMulti.cpp.o
[ 92%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/guis/GuiScraperStart.cpp.o
[ 93%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/scrapers/Scraper.cpp.o
[ 94%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/scrapers/GamesDBScraper.cpp.o
[ 94%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/scrapers/TheArchiveScraper.cpp.o
[ 95%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/views/gamelist/BasicGameListView.cpp.o
[ 96%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/views/gamelist/DetailedGameListView.cpp.o
[ 97%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/views/gamelist/IGameListView.cpp.o
[ 98%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/views/gamelist/ISimpleGameListView.cpp.o
[ 99%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/views/gamelist/GridGameListView.cpp.o
[100%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/views/SystemView.cpp.o
[100%] Building CXX object es-app/CMakeFiles/emulationstation.dir/src/views/ViewController.cpp.o
Linking CXX executable ../emulationstation
[100%] Built target emulationstation
Here is the compiled 64bit Linux binary (compiled on xubuntu) http://s000.tinyupload.com/?file_id=67946490456360345709 md5sum: dc8315cf33221a91bcac3a2272f30341 (that is the archive BTW)
Compile and execution were carried out with the Raspberry Pi. Japanese was not able to be displayed. It becomes a square character. It is regrettable...
how about other characters like a e with a accent? (Pokémon)
did you replace the original /usr/bin/emulationstation
file with the new one?
if accents work the pi may be missing a language set
I just pushed some more changes to the utf8 branch last night that fix some cursor issues when editing multiline text and some issues with Unicode file names not being properly read on Windows. Boost.locale is now needed to compile (sudo apt-get install libboost-locale-dev
), and you'll need your system set to some UTF8 locale (e.g. en_US.UTF8
, but any locale should work as long as it ends in .UTF8
). Your system is probably already be set to this.
The fallback font /usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf
should be used on Linux (which is present on every Debian install as far as I can tell), so check to make sure that exists if you're having trouble. I have not yet had a chance to try it on an RPi myself. I've tested this on a Windows 8 machine (with the Japanese language pack installed) and an Ubuntu 14.04 machine.
The Windows UTF8 beta zip has been updated with these changes: https://dl.dropboxusercontent.com/u/2816162/emulationstation_utf8.zip
This should fix the last of the issues I know about.
I'm sorry, maybe there was a misunderstanding.
But, this screen is visible.
Square character is an alphanumeric double-byte.
Raspberry Pi
Hmm, interesting. Could you paste the text for one of those games here?
It is a title of the game currently displayed.
The text file was not able to be attached in the comment field of Github.
F-1 サーカス’91
F-1 サーカス’92
F-1 トリプルバトル
F-1 DREAM
F-1 PILOT
GAMES EXPRESS CD CARD 1993
Jリーグ グレイテストイレブン
Mr.HELIの大冒険
N--大河ドラマ 太平記
P-47
PCパチスロ
PC原人
PC原人2
PC原人3
PC原人3 体験版
It says to a game author just to make sure.
" Such file sizes are 0 byte. "
He noticed today that there was sauce on the 19th. I am sorry to have made time and effort applied. It was displayed when compiling it.
I would like to be glad and to tell someone !!
well this is strange
it works just fine on my main install
also works fine on a minimalist xfce install after i installed fonts-takao
but on my minimalist lubuntu setup Japanese characters are not working (show up as squares) despite the font set being installed, other characters are working just fine like the accented e in Pokemon
all are using the same binary file i compiled above, any thoughts?
Edit: For the ubuntu deb package i think we should mark fonts-droid
as a dependency
I can't compile it currently
Run Build Command:/usr/bin/make "cmTryCompileExec4170643181/fast"
/usr/bin/make -f CMakeFiles/cmTryCompileExec4170643181.dir/build.make CMakeFiles/cmTryCompileExec4170643181.dir/build
make[1]: Entering directory `/home/chad/EmulationStation/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report /home/chad/EmulationStation/CMakeFiles/CMakeTmp/CMakeFiles 1
Building C object CMakeFiles/cmTryCompileExec4170643181.dir/CheckFunctionExists.c.o
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create -o CMakeFiles/cmTryCompileExec4170643181.dir/CheckFunctionExists.c.o -c /usr/share/cmake-2.8/Modules/CheckFunctionExists.c
Linking C executable cmTryCompileExec4170643181
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec4170643181.dir/link.txt --verbose=1
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create CMakeFiles/cmTryCompileExec4170643181.dir/CheckFunctionExists.c.o -o cmTryCompileExec4170643181 -rdynamic -lpthreads
/usr/bin/ld: cannot find -lpthreads
collect2: error: ld returned 1 exit status
make[1]: Leaving directory `/home/chad/EmulationStation/CMakeFiles/CMakeTmp'
make[1]: *** [cmTryCompileExec4170643181] Error 1
make: *** [cmTryCompileExec4170643181/fast] Error 2
Hi,
I am running RetroPie Version 3.0 RC 1 for Raspberry Pi 2, and have run the source based installation (to update everything to the latest version). I would love to have Japanese kanji for the titles of my Japanese games, while keeping English for my English games.
I've installed the fonts-takao font with these 2 commands: sudo apt-get install fonts-takao-mincho sudo apt-get install fonts-takao
But currently the titles are still showing up as boxes Example: コントラ or 魂斗羅 is showing up as boxes.
Note: Before copying the rom to my Pi, I confirmed that the name of the rom was in Japanese, コントラ.nes. I have not figured out how to get my Japanese keyboard to switch from English to Japanese within emulationstation.
Can anyone suggest how I can fix this?
Hi. The solution is as follows .
sudo apt-get install fonts-droid
/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf Put the 'DroidSansFallbackFull.ttf' here.
Hi,
You guys are amazing :) The one command fixed it for me:
sudo apt-get install fonts-droid
Thank you so much!
Hello all!
I'm just getting started with a new Raspberry Pi 3, and I would also love to enable Japanese characters in EmulationStation. I'd like to use it just to display metadata (e.g. game title and description). I'm fine with my filenames being romanized.
Unfortunately, I'm a complete newbie when it comes to technical configurations like what seems to be entailed here. I use a Mac currently (I interface directly with the Pi via "Connect to Server"), and have absolutely zero experience using the OSX Terminal. I've never "sudo"-ed anything, and really have no idea what I'm doing in that regard.
Anyway, I was wondering if someone might be able to help me enable Japanese text to display in EmulationStation, despite my woeful lack of experience. So far, all I've been able to do is edit one game's metadata XML file and add Japanese to it directly. However, in EmulationStation, that text shows up as a bunch of dots (......).
Thanks so much, and my apologies in advance for not having the technical knowhow to adequately interpret previous responses in this thread.
-- C42
I have and love the EmulationStation in Raspberry Pi. But the file name of the Japanese is garbled in the game ROM list. I want you to support the double-byte character.
Thank you.