mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/4jcraft.git
synced 2026-09-23 11:18:07 +00:00
Merge pull request #155 from 4jcraft/feat/restore-java-gui
feat: restore unused java GUI
This commit is contained in:
@@ -1,11 +1,66 @@
|
||||
#include "../Platform/stdafx.h"
|
||||
#include "Language.h"
|
||||
#include "../IO/Files/File.h"
|
||||
#include "../IO/Files/FileInputStream.h"
|
||||
|
||||
// 4J - TODO - properly implement
|
||||
// 4jcraft: done!
|
||||
|
||||
Language* Language::singleton = nullptr;
|
||||
|
||||
Language::Language() {}
|
||||
Language::Language() {
|
||||
// TODO: move the language loading out of the init to better match 1.3.x
|
||||
// see StringTranslate.java in MCP 7.x for more context
|
||||
File langFile(L"Common/res/lang/en_US.lang");
|
||||
if (langFile.exists()) {
|
||||
InputStream* stream = new FileInputStream(langFile);
|
||||
if (stream) {
|
||||
__int64 fileSize = langFile.length();
|
||||
if (fileSize > 0) {
|
||||
// 4jcraft: we would've used BufferedReader like the JE
|
||||
// equivalent here, but the lang file starts with a newline,
|
||||
// causing readLine() in this BufferedReader impl to just return
|
||||
// an empty string
|
||||
//
|
||||
// InputStreamReader reader(stream);
|
||||
// BufferedReader bufferedReader(&reader);
|
||||
// std::wstring line;
|
||||
byteArray buffer((unsigned int)fileSize);
|
||||
int bytesRead = stream->read(buffer, 0, (unsigned int)fileSize);
|
||||
if (bytesRead > 0) {
|
||||
std::string content(reinterpret_cast<char*>(buffer.data),
|
||||
bytesRead);
|
||||
std::istringstream iss(content);
|
||||
std::string line;
|
||||
|
||||
// while (!(line = bufferedReader.readLine()).empty()) {
|
||||
while (std::getline(iss, line)) {
|
||||
size_t start = line.find_first_not_of(" \t\r\n");
|
||||
if (start == std::string::npos) continue;
|
||||
|
||||
size_t end = line.find_last_not_of(" \t\r\n");
|
||||
std::string trimmed =
|
||||
line.substr(start, end - start + 1);
|
||||
|
||||
if (trimmed.empty() || trimmed[0] == '#') continue;
|
||||
|
||||
size_t equalsPos = trimmed.find('=');
|
||||
if (equalsPos != std::string::npos) {
|
||||
std::string key = trimmed.substr(0, equalsPos);
|
||||
std::string value = trimmed.substr(equalsPos + 1);
|
||||
|
||||
std::wstring wkey(key.begin(), key.end());
|
||||
std::wstring wvalue(value.begin(), value.end());
|
||||
|
||||
translateTable[wkey] = wvalue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
delete stream;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Language* Language::getInstance() {
|
||||
// 4jcraft, fixes static init fiassco in I18n.cpp
|
||||
@@ -31,19 +86,39 @@ std::wstring Language::getElement(std::wstring elementId, ...) {
|
||||
#else
|
||||
va_list args;
|
||||
va_start(args, elementId);
|
||||
return getElement(elementId, args);
|
||||
std::wstring result = getElement(elementId, args);
|
||||
va_end(args);
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
|
||||
std::wstring Language::getElement(const std::wstring& elementId, va_list args) {
|
||||
// 4J TODO
|
||||
return elementId;
|
||||
auto it = translateTable.find(elementId);
|
||||
std::wstring formatString =
|
||||
(it != translateTable.end()) ? it->second : elementId;
|
||||
|
||||
if (formatString.find(L'%') != std::wstring::npos) {
|
||||
int bufferSize = formatString.length() + 256;
|
||||
std::vector<wchar_t> buffer(bufferSize);
|
||||
|
||||
int written =
|
||||
vswprintf(buffer.data(), bufferSize, formatString.c_str(), args);
|
||||
if (written >= 0) {
|
||||
return std::wstring(buffer.data(), written);
|
||||
}
|
||||
}
|
||||
|
||||
return formatString;
|
||||
}
|
||||
|
||||
std::wstring Language::getElementName(const std::wstring& elementId) {
|
||||
return elementId;
|
||||
std::wstring nameKey = elementId + L".name";
|
||||
auto it = translateTable.find(nameKey);
|
||||
return (it != translateTable.end()) ? it->second : elementId;
|
||||
}
|
||||
|
||||
std::wstring Language::getElementDescription(const std::wstring& elementId) {
|
||||
return elementId;
|
||||
std::wstring descKey = elementId + L".description";
|
||||
auto it = translateTable.find(descKey);
|
||||
return (it != translateTable.end()) ? it->second : elementId;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
class Language {
|
||||
private:
|
||||
static Language* singleton;
|
||||
std::unordered_map<std::wstring, std::wstring> translateTable;
|
||||
|
||||
public:
|
||||
Language();
|
||||
|
||||
Reference in New Issue
Block a user