From 42bd769d5cef59c80f8248fded73f2012589d3cc Mon Sep 17 00:00:00 2001 From: Tsubasa6848 Date: Sun, 24 Mar 2024 05:16:18 +0800 Subject: [PATCH] feat: l18n --- lib/GMLIB_API-JS.js | 62 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/lib/GMLIB_API-JS.js b/lib/GMLIB_API-JS.js index 90e4da1..869cdb4 100644 --- a/lib/GMLIB_API-JS.js +++ b/lib/GMLIB_API-JS.js @@ -649,6 +649,7 @@ class JsonConfig { constructor(path, defultValue = {}) { this.mData = defultValue; this.mPath = path; + this.init(); } init() { @@ -688,6 +689,63 @@ class JsonConfig { } } +class JsonLanguage extends JsonConfig { + constructor(path, defultValue = {}) { + super(path, defultValue); + } + + translate(key, data = []) { + let result = this.get(key); + if (result == null) { + return key; + } + data.forEach((val, index) => { + let old = `{${index + 1}}`; + result = result.split(old).join(val); + }); + return result; + } +} + +class JsonI18n { + constructor(path, localLangCode = "en_US") { + this.mPath = path; + this.mLangCode = localLangCode; + this.mAllLanguages = {}; + this.mDefaultLangCode = "en_US" + } + + loadLanguage(langCode, defaultData = {}) { + let langPath = this.mPath; + if (!langPath.endsWith("/") && !langPath.endsWith("\\")) { + langPath = langPath + "/"; + } + langPath = langPath + langCode + ".json"; + let language = new JsonLanguage(langPath, defaultData); + this.mAllLanguages[langCode] = language; + } + + chooseLanguage(langCode) { + this.mLangCode = langCode; + } + + setDefaultLanguage(langCode) { + this.mDefaultLangCode = langCode; + } + + translate(key, data = [], langCode = this.mLangCode) { + let language = this.mAllLanguages[langCode]; + let result = language.translate(key, data); + if (result == key) { + let language = this.mAllLanguages[this.mDefaultLangCode]; + if (language) { + result = language.translate(key, data); + } + } + return result; + } +}; + module.exports = { StaticFloatingText, DynamicFloatingText, @@ -696,5 +754,7 @@ module.exports = { Experiments, GMLIB, Scoreboard, - JsonConfig + JsonConfig, + JsonLanguage, + JsonI18n }; \ No newline at end of file