在 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
Run Code Online (Sandbox Code Playgroud)
感觉很脏,很不雅观。
有没有更好甚至标准的方法来做到这一点?我找不到一个。
最小工作示例:
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 …Run Code Online (Sandbox Code Playgroud)