Commit b275d130 authored by nanahira's avatar nanahira

multi language

parent 22434de9
...@@ -59,6 +59,7 @@ ...@@ -59,6 +59,7 @@
/sound/BGM /sound/BGM
/update /update
/update* /update*
/locales
# ygopro main program # ygopro main program
/ygopro /ygopro
......
...@@ -84,8 +84,10 @@ bool Game::Initialize() { ...@@ -84,8 +84,10 @@ bool Game::Initialize() {
if(!imageManager.Initial()) if(!imageManager.Initial())
return false; return false;
LoadExpansionDB(); LoadExpansionDB();
if(dataManager.LoadDB(GetLocaleDir("cards.cdb"))) {} else
if(!dataManager.LoadDB("cards.cdb")) if(!dataManager.LoadDB("cards.cdb"))
return false; return false;
if(dataManager.LoadStrings(GetLocaleDir("strings.conf"))) {} else
if(!dataManager.LoadStrings("strings.conf")) if(!dataManager.LoadStrings("strings.conf"))
return false; return false;
dataManager.LoadStrings("./expansions/strings.conf"); dataManager.LoadStrings("./expansions/strings.conf");
...@@ -1049,7 +1051,9 @@ void Game::RefreshBot() { ...@@ -1049,7 +1051,9 @@ void Game::RefreshBot() {
if(!gameConf.enable_bot_mode) if(!gameConf.enable_bot_mode)
return; return;
botInfo.clear(); botInfo.clear();
FILE* fp = fopen("bot.conf", "r"); FILE* fp = fopen(GetLocaleDir("bot.conf"), "r");
if(!fp)
fp = fopen("bot.conf", "r");
char linebuf[256]; char linebuf[256];
char strbuf[256]; char strbuf[256];
if(fp) { if(fp) {
...@@ -1236,6 +1240,9 @@ void Game::LoadConfig() { ...@@ -1236,6 +1240,9 @@ void Game::LoadConfig() {
} else if (!strcmp(strbuf, "lastdeck")) { } else if (!strcmp(strbuf, "lastdeck")) {
BufferIO::DecodeUTF8(valbuf, wstr); BufferIO::DecodeUTF8(valbuf, wstr);
BufferIO::CopyWStr(wstr, gameConf.lastdeck, 64); BufferIO::CopyWStr(wstr, gameConf.lastdeck, 64);
} else if (!strcmp(strbuf, "locale")) {
BufferIO::DecodeUTF8(valbuf, wstr);
BufferIO::CopyWStr(wstr, gameConf.locale, 64);
} }
} }
} }
...@@ -1343,6 +1350,9 @@ void Game::LoadConfig() { ...@@ -1343,6 +1350,9 @@ void Game::LoadConfig() {
} else if (!strcmp(strbuf, "lastdeck")) { } else if (!strcmp(strbuf, "lastdeck")) {
BufferIO::DecodeUTF8(valbuf, wstr); BufferIO::DecodeUTF8(valbuf, wstr);
BufferIO::CopyWStr(wstr, gameConf.lastdeck, 64); BufferIO::CopyWStr(wstr, gameConf.lastdeck, 64);
} else if (!strcmp(strbuf, "locale")) {
BufferIO::DecodeUTF8(valbuf, wstr);
BufferIO::CopyWStr(wstr, gameConf.locale, 64);
} }
} }
} }
...@@ -1418,6 +1428,8 @@ void Game::SaveConfig() { ...@@ -1418,6 +1428,8 @@ void Game::SaveConfig() {
#endif #endif
fprintf(fp, "enable_pendulum_scale = %d\n", ((mainGame->chkEnablePScale->isChecked()) ? 1 : 0)); fprintf(fp, "enable_pendulum_scale = %d\n", ((mainGame->chkEnablePScale->isChecked()) ? 1 : 0));
fprintf(fp, "skin_index = %d\n", gameConf.skin_index); fprintf(fp, "skin_index = %d\n", gameConf.skin_index);
BufferIO::EncodeUTF8(gameConf.locale, linebuf);
fprintf(fp, "locale = %s\n", linebuf);
fclose(fp); fclose(fp);
} }
void Game::ShowCardInfo(int code, bool resize) { void Game::ShowCardInfo(int code, bool resize) {
...@@ -1636,6 +1648,8 @@ void Game::initUtils() { ...@@ -1636,6 +1648,8 @@ void Game::initUtils() {
MakeDirectory("sound/custom"); MakeDirectory("sound/custom");
MakeDirectory("sound/BGM/custom"); MakeDirectory("sound/BGM/custom");
#endif #endif
//locales
MakeDirectory("locales");
//pics //pics
MakeDirectory("pics"); MakeDirectory("pics");
MakeDirectory("pics/field"); MakeDirectory("pics/field");
...@@ -2002,6 +2016,16 @@ void Game::takeScreenshot() { ...@@ -2002,6 +2016,16 @@ void Game::takeScreenshot() {
} else } else
device->getLogger()->log(L"Failed to take screenshot.", irr::ELL_WARNING); device->getLogger()->log(L"Failed to take screenshot.", irr::ELL_WARNING);
} }
const char* Game::GetLocaleDir(const char* dir) {
if(!gameConf.locale || !wcscmp(gameConf.locale, L"default"))
return dir;
wchar_t locale_buf[256];
wchar_t orig_dir[64];
BufferIO::DecodeUTF8(dir, orig_dir);
myswprintf(locale_buf, L"locales/%ls/%ls", gameConf.locale, orig_dir);
BufferIO::EncodeUTF8(locale_buf, locale_buf_utf8);
return locale_buf_utf8;
}
void Game::SetCursor(ECURSOR_ICON icon) { void Game::SetCursor(ECURSOR_ICON icon) {
ICursorControl* cursor = mainGame->device->getCursorControl(); ICursorControl* cursor = mainGame->device->getCursorControl();
if(cursor->getActiveIcon() != icon) { if(cursor->getActiveIcon() != icon) {
......
...@@ -26,6 +26,7 @@ struct Config { ...@@ -26,6 +26,7 @@ struct Config {
wchar_t textfont[256]; wchar_t textfont[256];
wchar_t numfont[256]; wchar_t numfont[256];
wchar_t roompass[20]; wchar_t roompass[20];
wchar_t locale[64];
//settings //settings
int chkMAutoPos; int chkMAutoPos;
int chkSTAutoPos; int chkSTAutoPos;
...@@ -156,6 +157,7 @@ public: ...@@ -156,6 +157,7 @@ public:
int LocalPlayer(int player); int LocalPlayer(int player);
const wchar_t* LocalName(int local_player); const wchar_t* LocalName(int local_player);
const char* GetLocaleDir(const char* dir);
bool HasFocus(EGUI_ELEMENT_TYPE type) const { bool HasFocus(EGUI_ELEMENT_TYPE type) const {
irr::gui::IGUIElement* focus = env->getFocus(); irr::gui::IGUIElement* focus = env->getFocus();
...@@ -235,6 +237,7 @@ public: ...@@ -235,6 +237,7 @@ public:
float yScale; float yScale;
CGUISkinSystem *skinSystem; CGUISkinSystem *skinSystem;
char locale_buf_utf8[256];
ClientField dField; ClientField dField;
DeckBuilder deckBuilder; DeckBuilder deckBuilder;
......
...@@ -337,6 +337,14 @@ irr::video::ITexture* ImageManager::GetTexture(int code, bool fit) { ...@@ -337,6 +337,14 @@ irr::video::ITexture* ImageManager::GetTexture(int code, bool fit) {
sprintf(file, "expansions/pics/%d.jpg", code); sprintf(file, "expansions/pics/%d.jpg", code);
img = GetTextureFromFile(file, width, height); img = GetTextureFromFile(file, width, height);
} }
if(img == NULL) {
sprintf(file, mainGame->GetLocaleDir("pics/%d.png"), code);
img = GetTextureFromFile(file, width, height);
}
if(img == NULL) {
sprintf(file, mainGame->GetLocaleDir("pics/%d.jpg"), code);
img = GetTextureFromFile(file, width, height);
}
if(img == NULL) { if(img == NULL) {
sprintf(file, "pics/%d.png", code); sprintf(file, "pics/%d.png", code);
img = GetTextureFromFile(file, width, height); img = GetTextureFromFile(file, width, height);
...@@ -371,6 +379,14 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) { ...@@ -371,6 +379,14 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
sprintf(file, "expansions/pics/thumbnail/%d.jpg", code); sprintf(file, "expansions/pics/thumbnail/%d.jpg", code);
img = GetTextureFromFile(file, width, height); img = GetTextureFromFile(file, width, height);
} }
if(img == NULL) {
sprintf(file, mainGame->GetLocaleDir("pics/thumbnail/%d.png"), code);
img = GetTextureFromFile(file, width, height);
}
if(img == NULL) {
sprintf(file, mainGame->GetLocaleDir("pics/thumbnail/%d.jpg"), code);
img = GetTextureFromFile(file, width, height);
}
if(img == NULL) { if(img == NULL) {
sprintf(file, "pics/thumbnail/%d.png", code); sprintf(file, "pics/thumbnail/%d.png", code);
img = GetTextureFromFile(file, width, height); img = GetTextureFromFile(file, width, height);
...@@ -386,6 +402,14 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) { ...@@ -386,6 +402,14 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
sprintf(file, "expansions/pics/%d.jpg", code); sprintf(file, "expansions/pics/%d.jpg", code);
img = GetTextureFromFile(file, width, height); img = GetTextureFromFile(file, width, height);
} }
if(img == NULL) {
sprintf(file, mainGame->GetLocaleDir("pics/%d.png"), code);
img = GetTextureFromFile(file, width, height);
}
if(img == NULL) {
sprintf(file, mainGame->GetLocaleDir("pics/%d.jpg"), code);
img = GetTextureFromFile(file, width, height);
}
if(img == NULL) { if(img == NULL) {
sprintf(file, "pics/%d.png", code); sprintf(file, "pics/%d.png", code);
img = GetTextureFromFile(file, width, height); img = GetTextureFromFile(file, width, height);
......
...@@ -314,6 +314,7 @@ ...@@ -314,6 +314,7 @@
!system 1285 !system 1285
!system 1286 特大 !system 1286 特大
!system 1287 数字灵摆图片 !system 1287 数字灵摆图片
!system 1288 语言(重启后生效):
!system 1290 忽略对方发言 !system 1290 忽略对方发言
!system 1291 忽略观战者发言 !system 1291 忽略观战者发言
!system 1292 忽略时点 !system 1292 忽略时点
......
...@@ -43,3 +43,4 @@ window_height = 640 ...@@ -43,3 +43,4 @@ window_height = 640
resize_popup_menu = 0 resize_popup_menu = 0
enable_pendulum_scale = 1 enable_pendulum_scale = 1
skin_index = -1 skin_index = -1
locale = default
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment