99 lines
2.3 KiB
Go
99 lines
2.3 KiB
Go
package Managers
|
|
|
|
import (
|
|
"AnP/Models"
|
|
"AnP/Utils"
|
|
"slices"
|
|
"strings"
|
|
)
|
|
|
|
type I18NManager struct {
|
|
anp Models.AnPModel
|
|
default_language string
|
|
language_selected string
|
|
sentences map[string]map[string]any
|
|
}
|
|
|
|
func NewI18NManager(anp Models.AnPModel, inputs any) I18NManager {
|
|
|
|
var i18n I18NManager = I18NManager{
|
|
anp: anp,
|
|
default_language: "english",
|
|
language_selected: "english",
|
|
sentences: map[string]map[string]any{},
|
|
}
|
|
|
|
for _, key := range []string{"default_i18n_files", "default_i18n", "i18n_files", "i18n"} {
|
|
i18n.Add(anp.Settings.Get(key, nil, nil), true, "AnP")
|
|
}
|
|
|
|
return i18n
|
|
}
|
|
|
|
func (_self *I18NManager) Add(inputs any, overwrite bool, header string) {
|
|
_self.anp.Request.LoadJSON(inputs, func(data any) {
|
|
for language, sentences := range Utils.Get[map[string]map[string]any](data, nil) {
|
|
if _, exists := _self.sentences[language]; !exists {
|
|
_self.sentences[language] = map[string]any{}
|
|
}
|
|
for key, sentence := range sentences {
|
|
if Utils.IsAnPKey(key, header) {
|
|
_, exists := _self.sentences[language][key]
|
|
if overwrite || !exists {
|
|
_self.sentences[language][key] = sentence
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}, true)
|
|
}
|
|
|
|
func (_self I18NManager) GetRaw(texts any, _default string) string {
|
|
|
|
var keys []string = Utils.GetKeys(texts)
|
|
|
|
if len(keys) != 0 {
|
|
|
|
var done []string = []string{}
|
|
|
|
for _, language := range append(
|
|
[]string{_self.language_selected, _self.default_language},
|
|
Utils.GetMapKeys(_self.sentences)...,
|
|
) {
|
|
if !slices.Contains(done, language) {
|
|
if _, exists := _self.sentences[language]; !exists {
|
|
for _, key := range keys {
|
|
if _, exists := _self.sentences[language][key]; exists {
|
|
switch text := _self.sentences[language][key].(type) {
|
|
case string:
|
|
return text
|
|
case []string:
|
|
return strings.Join(text, "")
|
|
}
|
|
return _default
|
|
}
|
|
}
|
|
}
|
|
done = append(done, language)
|
|
}
|
|
}
|
|
}
|
|
|
|
var text_options []string = Utils.GetStrings(texts)
|
|
|
|
if len(text_options) != 0 {
|
|
return text_options[0]
|
|
}
|
|
return _default
|
|
}
|
|
|
|
func (_self I18NManager) Get(texts any, inputs any, _default string) string {
|
|
|
|
var text string = _self.GetRaw(texts, _default)
|
|
|
|
if inputs == nil {
|
|
return text
|
|
}
|
|
return Utils.StringVariables(text, inputs, nil)
|
|
}
|