4
Javaでは、ロケールからLocale.LanguageRangeを作成する方法はありますか?現時点でJavaのロケールからLocale.LanguageRangeを作成する標準的な方法
私はこれを行う:
List<LanguageRange> ranges =
Locale.LanguageRange.parse(
locale.toString() // locale.toString() gives en_GB
.replace('_', '-') // parse() needs en-GB
+ ";q=1.0"); // weight
それは汚いし、非常に洗練感じています。
もっと良い方法や標準的な方法がありますか?私は1つを見つけることができませんでした。
最小限の作業例:
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.Locale.LanguageRange;
public class LanguageUtil {
public static Locale getClosestMatch(Locale locale, Locale defaultLocale, Collection<Locale> allowedLanguages) {
List<LanguageRange> ranges = Locale.LanguageRange.parse(
locale.toString().replace('_', '-') + ";q=1.0," + //exact match e.g. en-GB -> en-GB
locale.getLanguage() + ";q=0.5," + //close match e.g. en-US -> en-GB
defaultLocale.toString().replace('_', '-') + ";q=0.0")); //default match e.g. fr-FR -> en-GB
return Locale.filter(ranges, allowedLanguages).get(0);
}
}