1. 程式人生 > >cocos2d-x-3.1 國際化strings.xml解決亂碼問題 (coco2d-x 學習筆記四)

cocos2d-x-3.1 國際化strings.xml解決亂碼問題 (coco2d-x 學習筆記四)

source ron 文件 亂碼問題 resource -s type fileutil ani

今天寫程序的時候發現輸出文字亂碼,盡管在實際開發中把字符串寫在代碼裏是不好的做法。可是有時候也是為了方便,遇到此問題第一時間在腦子裏面聯想到android下的strings.xml來做國際化。本文就僅僅針對解析xml來實現cocos2d-x的國際化解決亂碼問題。

尋找解決方法的時候在cocos2d-x的cpp-tests文件裏發現strings.xml,因此在事例源代碼中發現此方法。

為了方便,我直接將C:\cocos2d-x-3.1\tests\cpp-tests\Resources\fonts的strings.xml文件復制到自己的fonts目錄下。

strings.xml內容例如以下:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>chinese1</key>
	<string>美好的一天</string>
	<key>japanese</key>
	<string>良い一日を</string>
	<key>russian</key>
	<string>Хорошего дня</string>
	<key>spanish</key>
	<string>Buen día</string>
</dict>
</plist>

xml解析代碼實現例如以下:

auto strings = FileUtils::getInstance()->getValueMapFromFile("fonts/strings.xml");
	std::string chinese = strings["chinese1"].asString();
	std::string russian = strings["russian"].asString();
	std::string spanish = strings["spanish"].asString();
	std::string japanese = strings["japanese"].asString();

查看源代碼的時候也發現此方式用的是sax解析,所以讀者能夠不用操心效率及內存問題。



cocos2d-x-3.1 國際化strings.xml解決亂碼問題 (coco2d-x 學習筆記四)