diff --git a/src/Entry.cpp b/src/Entry.cpp index 2acab9b..12af14b 100644 --- a/src/Entry.cpp +++ b/src/Entry.cpp @@ -12,6 +12,8 @@ #include "ll/api/mod/ModManagerRegistry.h" #include "ll/api/mod/RegisterHelper.h" #include "ll/api/service/Bedrock.h" +#include "ll/api/io/FileUtils.h" +#include #include "gmlib/gm/i18n/LangI18n.h" #include "gmlib/gm/i18n/ResourceI18n.h" @@ -33,8 +35,13 @@ Entry& Entry::getInstance() { } bool Entry::load() { - isResourceI18nLoaded=false; - + isResourceI18nLoaded=false; + if (!ll::file_utils::readFile(getSelf().getLangDir() / u8"en_US.lang").has_value()) { + ll::file_utils::writeFile(getSelf().getLangDir() / u8"en_US.lang", en_US); + } + if (!ll::file_utils::readFile(getSelf().getLangDir() / u8"zh_CN.lang").has_value()) { + ll::file_utils::writeFile(getSelf().getLangDir() / u8"zh_CN.lang", zh_CN); + } mConfig.emplace(); if (!ll::config::loadConfig(*mConfig, getSelf().getConfigDir() / u8"config.json")) { ll::config::saveConfig(*mConfig, getSelf().getConfigDir() / u8"config.json"); @@ -82,19 +89,38 @@ gmlib::i18n::LangI18n& Entry::getI18n() { } void Entry::loadI18n() { + const std::string custom_zh_CN = ll::file_utils::readFile( + getSelf().getLangDir() / u8"zh_CN.lang", + false + ) + .value_or(zh_CN); + const std::string custom_en_US = ll::file_utils::readFile( + getSelf().getLangDir() / u8"en_US.lang", + false + ) + .value_or(en_US); + mI18n= std::make_unique(getSelf().getLangDir(), getConfig().ServerSideTranslation.Language); - mI18n->updateOrCreateLanguage("en_US", en_US); - mI18n->updateOrCreateLanguage("zh_CN", zh_CN); + mI18n->updateOrCreateLanguage("en_US", custom_en_US); + mI18n->updateOrCreateLanguage("zh_CN", custom_zh_CN); mI18n->loadAllLanguages(); - mI18n->setDefaultLanguage("zh_CN"); + mI18n->setDefaultLanguage(getConfig().ServerSideTranslation.Language); } void Entry::loadResourcePack() { - auto mResource = std::make_unique(getSelf().getModDir() / u8"lang", MOD_NAME, 0, 16, 1); - mResource->addLanguage("en_US", en_US); - mResource->addLanguage("zh_CN", zh_CN); + if ( + ll::file_utils::readFile(getSelf().getLangDir() / u8"en_US.lang")!= + ll::file_utils::readFile(getSelf().getModDir() / u8"resource/language_pack/texts/en_US.lang") + ||ll::file_utils::readFile(getSelf().getLangDir() / u8"zh_CN.lang")!= + ll::file_utils::readFile(getSelf().getModDir() / u8"resource/language_pack/texts/zh_CN.lang") + ) + std::filesystem::remove_all(getSelf().getModDir() / u8"resource"); + + auto mResource = std::make_unique(getSelf().getModDir() / u8"resource", MOD_NAME, 0, 16, 1); + mResource->addLanguageFromPath("zh_CN",getSelf().getLangDir() / u8"zh_CN.lang"); + mResource->addLanguageFromPath("en_US",getSelf().getLangDir() / u8"en_US.lang"); mResource->loadAllLanguages(); isResourceI18nLoaded=true; } @@ -110,8 +136,6 @@ LL_REGISTER_MOD(DeathMessages::Entry, DeathMessages::Entry::getInstance()); std::string tr(std::string const& key, std::vector const& params) { auto& i18n = DeathMessages::Entry::getInstance().getI18n(); return i18n.get(key, params); - - return key; }