All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.freya02.botcommands.internal.commands.application.localization.BCLocalizationFunction.kt Maven / Gradle / Ivy

package com.freya02.botcommands.internal.commands.application.localization

import com.freya02.botcommands.api.localization.Localization
import com.freya02.botcommands.internal.BContextImpl
import com.freya02.botcommands.internal.core.SingleLogger
import mu.KotlinLogging
import net.dv8tion.jda.api.interactions.DiscordLocale
import net.dv8tion.jda.api.interactions.commands.localization.LocalizationFunction
import java.util.*

private val logger = KotlinLogging.logger { }

internal class BCLocalizationFunction(private val context: BContextImpl) : LocalizationFunction {
    private val baseNameToLocalesMap: Map> = context.applicationConfig.baseNameToLocalesMap

    override fun apply(localizationKey: String): Map {
        val map: MutableMap = EnumMap(DiscordLocale::class.java)

        baseNameToLocalesMap.forEach { (baseName, locales) ->
            for (locale in locales) {
                val instance = Localization.getInstance(baseName, locale)
                if (instance != null) {
                    if (instance.effectiveLocale !== locale) {
                        SingleLogger.current().tryLog(baseName, locale.toLanguageTag(), instance.effectiveLocale.toLanguageTag()) {
                            logger.warn(
                                "Localization bundle '{}' with locale '{}' was specified to be valid but was not found, falling back to '{}'",
                                baseName,
                                locale,
                                instance.effectiveLocale
                            )
                        }
                    }

                    val template = instance[localizationKey]
                    if (template != null) {
                        map[locale.toDiscordLocale()] = template.localize()
                    } else if (context.debugConfig.enabledMissingLocalizationLogs) {
                        SingleLogger.current().tryLog(baseName, locale.toLanguageTag(), localizationKey) {
                            logger.warn(
                                "Localization template '{}' could not be found in bundle '{}' with locale '{}' or below",
                                localizationKey,
                                baseName,
                                locale
                            )
                        }
                    }
                } else {
                    SingleLogger.current().tryLog(baseName, locale.toLanguageTag()) {
                        logger.warn("Localization bundle '{}' with locale '{}' was specified to be valid but was not found.", baseName, locale)
                    }
                }
            }
        }

        return map
    }

    private fun Locale.toDiscordLocale() = DiscordLocale.from(this)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy