LanguageData.java
package dev.aura.bungeechat.hook.metrics;
import com.google.common.annotations.VisibleForTesting;
import dev.aura.bungeechat.config.Configuration;
import java.util.Locale;
import java.util.MissingResourceException;
import org.bstats.bungeecord.Metrics.SimplePie;
public class LanguageData extends SimplePie {
public LanguageData() {
super("languages", LanguageData::getLanguage);
}
private static String getLanguage() {
final String configLanguage = Configuration.get().getString("Language");
return isValidLanguage(configLanguage) ? configLanguage : "custom";
}
/**
* Checks if a given language string is valid. Supports xx_yy and xx_yy_z, where xx is the
* language code, yy is the country code and z is any positive integer
*
* @param lang language string to check
* @return If the passed language string is correct
*/
@VisibleForTesting
static boolean isValidLanguage(String lang) {
String[] parts = lang.split("_", 4);
if (parts.length < 2 || parts.length > 3) return false;
try {
if (parts.length == 3 && !parts[2].chars().allMatch(Character::isDigit)) return false;
final Locale loc = new Locale(parts[0], parts[1]);
return (loc.getISO3Language() != null) && (loc.getISO3Country() != null);
} catch (MissingResourceException e) {
return false;
}
}
}