Java 类java.util.Locale.LanguageRange 实例源码
项目:lokalized-java
文件:DefaultStrings.java
/**
* Gets the locale to use if one was not explicitly provided.
*
* @return the implicit locale to use, not null
*/
@Nonnull
protected Locale getImplicitLocale() {
Locale locale = null;
if (getLocaleSupplier().isPresent()) {
locale = getLocaleSupplier().get().get();
} else if (getLanguageRangesSupplier().isPresent()) {
List<LanguageRange> languageRanges = getLanguageRangesSupplier().get().get();
if (languageRanges != null)
locale = Locale.lookup(languageRanges, getLocalizedStringsByLocale().keySet());
}
return locale == null ? getFallbackLocale() : locale;
}
项目:openjdk-jdk10
文件:Bug8159420.java
private static void testMapEquivalents() {
String ranges = "HI-IN";
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
HashMap<String, List<String>> map = new LinkedHashMap<>();
List<String> equivalentList = new ArrayList<>();
equivalentList.add("HI");
equivalentList.add("HI-Deva");
map.put("HI", equivalentList);
List<LanguageRange> expected = new ArrayList<>();
expected.add(new LanguageRange("hi-in"));
expected.add(new LanguageRange("hi-deva-in"));
List<LanguageRange> got
= LanguageRange.mapEquivalents(priorityList, map);
if (!areEqual(expected, got)) {
System.err.println("testMapEquivalents() failed");
err = true;
}
}
项目:openjdk-jdk10
文件:Bug8159420.java
private static boolean areEqual(List<LanguageRange> expected,
List<LanguageRange> got) {
boolean error = false;
if (expected.equals(got)) {
return !error;
}
List<LanguageRange> cloneExpected = new ArrayList<>(expected);
cloneExpected.removeAll(got);
if (!cloneExpected.isEmpty()) {
error = true;
System.err.println("Found missing range(s): " + cloneExpected);
}
// not creating the 'got' clone as the list will not be used after this
got.removeAll(expected);
if (!got.isEmpty()) {
error = true;
System.err.println("Found extra range(s): " + got);
}
return !error;
}
项目:openjdk-jdk10
文件:Bug8040211.java
private static void test_filterTags() {
boolean error = false;
String ranges = "gti;q=0.2, gfx";
String tags = "de-DE, gti, he, nyc, mwj, vaj";
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
List<String> tagList = generateLanguageTags(tags);
String actualTags
= showLanguageTags(Locale.filterTags(priorityList, tagList));
String expectedTags = "mwj, vaj, gti, nyc";
if (!expectedTags.equals(actualTags)) {
error = true;
showErrorMessage("filterTags()",
ranges, tags, expectedTags, actualTags);
}
if (error) {
err = true;
System.out.println(" test_filterTags() failed.");
} else {
System.out.println(" test_filterTags() passed.");
}
}
项目:openjdk-jdk10
文件:Bug8040211.java
private static void test_lookup() {
boolean error = false;
String ranges = "en;q=0.2, yam, rmx;q=0.9";
String tags = "de-DE, en, kwq, lmm";
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
List<Locale> localeList = generateLocales(tags);
String actualLocale
= Locale.lookup(priorityList, localeList).toLanguageTag();
String expectedLocale = "kwq";
if (!expectedLocale.equals(actualLocale)) {
error = true;
showErrorMessage("lookup()", ranges, tags, expectedLocale, actualLocale);
}
if (error) {
err = true;
System.out.println(" test_lookup() failed.");
} else {
System.out.println(" test_lookup() passed.");
}
}
项目:openjdk-jdk10
文件:Bug8040211.java
private static void test_lookupTag() {
boolean error = false;
String ranges = "en, tsf;q=0.2";
String tags = "es, ja-JP, taj";
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
List<String> tagList = generateLanguageTags(tags);
String actualTag = Locale.lookupTag(priorityList, tagList);
String expectedTag = "taj";
if (!expectedTag.equals(actualTag)) {
error = true;
showErrorMessage("lookupTag()", ranges, tags, expectedTag, actualTag);
}
if (error) {
err = true;
System.out.println(" test_lookupTag() failed.");
} else {
System.out.println(" test_lookupTag() passed.");
}
}
项目:openjdk-jdk10
文件:Bug8159420.java
private static void testParse() {
String ranges = "HI-Deva, ja-hIrA-JP, RKI";
try {
LanguageRange.parse(ranges);
} catch (Exception ex) {
System.err.println("[testParse() failed on range string: "
+ ranges + "] due to "+ex);
err = true;
}
}
项目:openjdk-jdk10
文件:Bug8159420.java
private static void testFilter(FilteringMode mode) {
String ranges = "hi-IN, itc-Ital";
String tags = "hi-IN, itc-Ital";
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
List<Locale> tagList = generateLocales(tags);
String actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
String expectedLocales = "hi-IN, itc-Ital";
if (!expectedLocales.equals(actualLocales)) {
System.err.println("testFilter(" + mode + ") failed on language ranges:"
+ " [" + ranges + "] and language tags: [" + tags + "]");
err = true;
}
}
项目:openjdk-jdk10
文件:Bug8159420.java
private static void testLookup() {
boolean error = false;
String ranges = "hi-IN, itc-Ital";
String tags = "hi-IN, itc-Ital";
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
List<Locale> localeList = generateLocales(tags);
Locale actualLocale
= Locale.lookup(priorityList, localeList);
String actualLocaleString = "";
if (actualLocale != null) {
actualLocaleString = actualLocale.toLanguageTag();
} else {
error = true;
}
String expectedLocale = "hi-IN";
if (!expectedLocale.equals(actualLocaleString)) {
error = true;
}
if (error) {
System.err.println("testLookup() failed on language ranges:"
+ " [" + ranges + "] and language tags: [" + tags + "]");
err = true;
}
}
项目:openjdk-jdk10
文件:Bug8026766.java
public static void main(String[] args) {
LanguageRange lr1 = new LanguageRange("ja", 1.0);
LanguageRange lr2 = new LanguageRange("fr", 0.0);
if (!lr1.toString().equals("ja") ||
!lr2.toString().equals("fr;q=0.0")) {
throw new RuntimeException("LanguageRange.toString() returned an unexpected result.");
}
}
项目:openjdk-jdk10
文件:Bug8032842.java
public static void testFilter(String ranges, List<String> tags,
List<String> expected, FilteringMode mode) {
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
List<String> actual = Locale.filterTags(priorityList, tags, mode);
if (!actual.equals(expected)) {
throw new RuntimeException("[filterTags() failed for the language"
+ " range: " + ranges + ", Expected: " + expected
+ ", Found: " + actual + "]");
}
}
项目:openjdk-jdk10
文件:Bug8032842.java
public static void testLookup(String ranges, List<String> tags,
String expected) {
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
String actual = Locale.lookupTag(priorityList, tags);
if (!actual.equals(expected)) {
throw new RuntimeException("[lookupTag() failed for the language"
+ " range: " + ranges + ", Expected: " + expected
+ ", Found: " + actual + "]");
}
}
项目:openjdk9
文件:Bug8026766.java
public static void main(String[] args) {
LanguageRange lr1 = new LanguageRange("ja", 1.0);
LanguageRange lr2 = new LanguageRange("fr", 0.0);
if (!lr1.toString().equals("ja") ||
!lr2.toString().equals("fr;q=0.0")) {
throw new RuntimeException("LanguageRange.toString() returned an unexpected result.");
}
}
项目:metasfresh
文件:ADLanguageList.java
/**
* Extract preferred language from HTTP "Accept-Language" header.
*
* @param acceptLanguageHeader
* @param defaultValue
* @return preferred language or <code>defaultValue</code>
* @see https://tools.ietf.org/html/rfc5646#section-2.1
*/
public String getAD_LanguageFromHttpAcceptLanguage(final String acceptLanguageHeader, final String defaultValue)
{
if (Check.isEmpty(acceptLanguageHeader, true))
{
return defaultValue;
}
try
{
final List<LanguageRange> languageRanges = LanguageRange.parse(acceptLanguageHeader);
if (languageRanges.isEmpty())
{
return defaultValue;
}
final BiMap<String, String> adLanguage2tag = Services.get(ILanguageDAO.class).retrieveAvailableLanguages().toHttpLanguageTags();
final String languageTag = Locale.lookupTag(languageRanges, adLanguage2tag.values());
if (languageTag == null)
{
return defaultValue;
}
final String adLanguage = adLanguage2tag.inverse().get(languageTag.toLowerCase());
if (adLanguage == null)
{
return defaultValue;
}
return adLanguage;
}
catch (final Exception ex)
{
logger.warn("Failed fetching AD_Language from {}. Returning {}", acceptLanguageHeader, defaultValue, ex);
return defaultValue;
}
}
项目:minimal-j
文件:MjWebDaemon.java
private static Locale getLocale(String userLocale) {
final List<LanguageRange> ranges = Locale.LanguageRange.parse(userLocale);
if (ranges != null) {
for (LanguageRange languageRange : ranges) {
final String localeString = languageRange.getRange();
final Locale locale = Locale.forLanguageTag(localeString);
return locale;
}
}
return null;
}
项目:nubes
文件:AcceptLanguageLocaleResolver.java
@Override
public Locale resolve(RoutingContext context, List<Locale> availableLocales) {
String accept = context.request().getHeader(ACCEPT_LANGUAGE.toString());
if (accept == null) {
return null;
}
List<LanguageRange> ranges = LanguageRange.parse(accept);
if (ranges.isEmpty()) {
return null;
}
return Locale.lookup(ranges, availableLocales);
}
项目:jooby
文件:RequestImpl.java
@Override
public Locale locale(final BiFunction<List<LanguageRange>, List<Locale>, Locale> filter) {
Supplier<Locale> def = () -> filter.apply(ImmutableList.of(), locales);
// don't fail on bad Accept-Language header, just fallback to default locale.
return lang.map(h -> Try.apply(() -> filter.apply(LocaleUtils.range(h), locales)).orElseGet(def))
.orElseGet(def);
}
项目:jooby
文件:RequestTest.java
@Test
public void locales() throws Exception {
new MockUnit(Route.class)
.run(unit -> {
assertEquals(null, new RequestMock() {
@Override
public List<Locale> locales(
final BiFunction<List<LanguageRange>, List<Locale>, List<Locale>> filter) {
return null;
}
}.locales());
});
}
项目:lokalized-java
文件:DefaultStrings.java
/**
* Constructs a localized string provider with builder-supplied data.
* <p>
* The fallback language code must be an ISO 639 alpha-2 or alpha-3 language code.
* When a language has both an alpha-2 code and an alpha-3 code, the alpha-2 code must be used.
*
* @param fallbackLanguageCode fallback language code, not null
* @param localizedStringSupplier supplier of localized strings, not null
* @param localeSupplier locale supplier, may be null
* @param languageRangesSupplier language ranges supplier, may be null
* @param failureMode strategy for dealing with lookup failures, may be null
*/
protected DefaultStrings(@Nonnull String fallbackLanguageCode,
@Nonnull Supplier<Map<Locale, ? extends Iterable<LocalizedString>>> localizedStringSupplier,
@Nullable Supplier<Locale> localeSupplier,
@Nullable Supplier<List<LanguageRange>> languageRangesSupplier,
@Nullable FailureMode failureMode) {
requireNonNull(fallbackLanguageCode);
requireNonNull(localizedStringSupplier);
this.logger = Logger.getLogger(LoggerType.STRINGS.getLoggerName());
Map<Locale, ? extends Iterable<LocalizedString>> suppliedLocalizedStringsByLocale = localizedStringSupplier.get();
if (suppliedLocalizedStringsByLocale == null)
suppliedLocalizedStringsByLocale = Collections.emptyMap();
// Defensive copy of iterator to unmodifiable set
Map<Locale, Set<LocalizedString>> localizedStringsByLocale = suppliedLocalizedStringsByLocale.entrySet().stream()
.collect(Collectors.toMap(
entry -> entry.getKey(),
entry -> {
Set<LocalizedString> localizedStrings = new LinkedHashSet<>();
entry.getValue().forEach(localizedStrings::add);
return Collections.unmodifiableSet(localizedStrings);
}
));
this.fallbackLocale = Locale.forLanguageTag(fallbackLanguageCode);
this.fallbackLanguageCode = fallbackLanguageCode;
this.localizedStringsByLocale = Collections.unmodifiableMap(localizedStringsByLocale);
this.languageRangesSupplier = languageRangesSupplier;
this.failureMode = failureMode == null ? FailureMode.USE_FALLBACK : failureMode;
this.stringInterpolator = new StringInterpolator();
this.expressionEvaluator = new ExpressionEvaluator();
this.localizedStringsByKeyByLocale = Collections.unmodifiableMap(localizedStringsByLocale.entrySet().stream()
.collect(Collectors.toMap(
entry1 -> entry1.getKey(),
entry1 ->
Collections.unmodifiableMap(entry1.getValue().stream()
.collect(Collectors.toMap(
entry2 -> entry2.getKey(),
entry2 -> entry2
)
)))));
this.localizedStringSourcesByLocale = new ConcurrentHashMap<>();
if (!localizedStringsByLocale.containsKey(getFallbackLocale()))
throw new IllegalArgumentException(format("Specified fallback language code is '%s' but no matching " +
"localized strings locale was found. Known locales: [%s]", fallbackLanguageCode,
localizedStringsByLocale.keySet().stream()
.map(locale -> locale.toLanguageTag())
.sorted()
.collect(Collectors.joining(", "))));
if (localeSupplier != null && languageRangesSupplier != null)
throw new IllegalArgumentException(format("You cannot provide both a localeSupplier " +
"and a languageRangesSupplier when building an instance of %s - you must pick one of the two.", getClass().getSimpleName()));
if (localeSupplier == null && languageRangesSupplier == null)
this.localeSupplier = () -> getFallbackLocale();
else
this.localeSupplier = localeSupplier;
}
项目:openjdk-jdk10
文件:Bug8040211.java
private static void test_parse() {
boolean error = false;
String str = "Accept-Language: aam, adp, aue, ema, en-gb-oed,"
+ " gti, koj, kwq, kxe, lii, lmm, mtm, ngv, oyb, phr, pub,"
+ " suj, taj;q=0.9, yug;q=0.5, gfx;q=0.4";
ArrayList<LanguageRange> expected = new ArrayList<>();
expected.add(new LanguageRange("aam", 1.0));
expected.add(new LanguageRange("aas", 1.0));
expected.add(new LanguageRange("adp", 1.0));
expected.add(new LanguageRange("dz", 1.0));
expected.add(new LanguageRange("aue", 1.0));
expected.add(new LanguageRange("ktz", 1.0));
expected.add(new LanguageRange("ema", 1.0));
expected.add(new LanguageRange("uok", 1.0));
expected.add(new LanguageRange("en-gb-oed", 1.0));
expected.add(new LanguageRange("en-gb-oxendict", 1.0));
expected.add(new LanguageRange("gti", 1.0));
expected.add(new LanguageRange("nyc", 1.0));
expected.add(new LanguageRange("koj", 1.0));
expected.add(new LanguageRange("kwv", 1.0));
expected.add(new LanguageRange("kwq", 1.0));
expected.add(new LanguageRange("yam", 1.0));
expected.add(new LanguageRange("kxe", 1.0));
expected.add(new LanguageRange("tvd", 1.0));
expected.add(new LanguageRange("lii", 1.0));
expected.add(new LanguageRange("raq", 1.0));
expected.add(new LanguageRange("lmm", 1.0));
expected.add(new LanguageRange("rmx", 1.0));
expected.add(new LanguageRange("mtm", 1.0));
expected.add(new LanguageRange("ymt", 1.0));
expected.add(new LanguageRange("ngv", 1.0));
expected.add(new LanguageRange("nnx", 1.0));
expected.add(new LanguageRange("oyb", 1.0));
expected.add(new LanguageRange("thx", 1.0));
expected.add(new LanguageRange("phr", 1.0));
expected.add(new LanguageRange("pmu", 1.0));
expected.add(new LanguageRange("pub", 1.0));
expected.add(new LanguageRange("puz", 1.0));
expected.add(new LanguageRange("suj", 1.0));
expected.add(new LanguageRange("xsj", 1.0));
expected.add(new LanguageRange("taj", 0.9));
expected.add(new LanguageRange("tsf", 0.9));
expected.add(new LanguageRange("yug", 0.5));
expected.add(new LanguageRange("yuu", 0.5));
expected.add(new LanguageRange("gfx", 0.4));
expected.add(new LanguageRange("oun", 0.4));
expected.add(new LanguageRange("mwj", 0.4));
expected.add(new LanguageRange("vaj", 0.4));
List<LanguageRange> got = LanguageRange.parse(str);
if (!areEqual(expected, got)) {
error = true;
System.err.println(" language parse() test failed.");
}
if (error) {
err = true;
System.err.println(" test_parse() failed.");
} else {
System.out.println(" test_parse() passed.");
}
}
项目:openjdk-jdk10
文件:Bug8040211.java
private static void test_filter() {
boolean error = false;
String ranges = "mtm-RU, en-gb-oed";
String tags = "de-DE, en, mtm-RU, ymt-RU, en-gb-oxendict, ja-JP";
FilteringMode mode = EXTENDED_FILTERING;
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
List<Locale> tagList = generateLocales(tags);
String actualLocales
= showLocales(Locale.filter(priorityList, tagList, mode));
String expectedLocales = "mtm-RU, ymt-RU, en-GB-oxendict";
if (!expectedLocales.equals(actualLocales)) {
error = true;
showErrorMessage("#1 filter(" + mode + ")",
ranges, tags, expectedLocales, actualLocales);
}
ranges = "phr-*-IN, ja-JP";
tags = "en, pmu-Guru-IN, ja-Latn-JP, iw";
mode = EXTENDED_FILTERING;
priorityList = LanguageRange.parse(ranges);
tagList = generateLocales(tags);
actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
expectedLocales = "pmu-Guru-IN, ja-Latn-JP";
if (!expectedLocales.equals(actualLocales)) {
error = true;
showErrorMessage("#2 filter(" + mode + ")",
ranges, tags, expectedLocales, actualLocales);
}
if (error) {
err = true;
System.out.println(" test_filter() failed.");
} else {
System.out.println(" test_filter() passed.");
}
}
项目:jooby
文件:RequestImpl.java
@Override
public List<Locale> locales(
final BiFunction<List<Locale.LanguageRange>, List<Locale>, List<Locale>> filter) {
return lang.map(h -> filter.apply(LocaleUtils.range(h), locales))
.orElseGet(() -> filter.apply(ImmutableList.of(), locales));
}
项目:jooby
文件:Request.java
@Override
public Locale locale(final BiFunction<List<LanguageRange>, List<Locale>, Locale> filter) {
return req.locale(filter);
}
项目:jooby
文件:Request.java
@Override
public List<Locale> locales(
final BiFunction<List<LanguageRange>, List<Locale>, List<Locale>> filter) {
return req.locales(filter);
}
项目:jooby
文件:RequestTest.java
@Override
public List<Locale> locales(
final BiFunction<List<LanguageRange>, List<Locale>, List<Locale>> filter) {
throw new UnsupportedOperationException();
}
项目:jooby
文件:RequestTest.java
@Override
public Locale locale(final BiFunction<List<LanguageRange>, List<Locale>, Locale> filter) {
throw new UnsupportedOperationException();
}
项目:lokalized-java
文件:DefaultStrings.java
/**
* Gets the language ranges supplier.
*
* @return the language ranges supplier, not null
*/
@Nonnull
protected Optional<Supplier<List<LanguageRange>>> getLanguageRangesSupplier() {
return Optional.ofNullable(languageRangesSupplier);
}
项目:lokalized-java
文件:StringsTests.java
@Test
public void languageRange() {
Strings strings = new DefaultStrings.Builder("en", () ->
LocalizedStringLoader.loadFromClasspath("strings")
).languageRangesSupplier(() -> LanguageRange.parse("en-US;q=1.0,en-GB;q=0.5,fr-FR;q=0.25")).build();
String translation = strings.get("I am going on vacation");
Assert.assertEquals("I am going on vacation", translation);
Strings enGbStrings = new DefaultStrings.Builder("en", () ->
LocalizedStringLoader.loadFromClasspath("strings")
).languageRangesSupplier(() -> LanguageRange.parse("en-GB;q=1.0,en;q=0.75,en-US;q=0.5,fr-FR;q=0.25")).build();
String enGbTranslation = enGbStrings.get("I am going on vacation");
Assert.assertEquals("I am going on holiday", enGbTranslation);
Strings enUsStrings = new DefaultStrings.Builder("ru", () ->
LocalizedStringLoader.loadFromClasspath("strings")
).languageRangesSupplier(() -> LanguageRange.parse("en-US;q=1.0,en-GB;q=0.5,fr-FR;q=0.25")).build();
String enUsTranslation = enUsStrings.get("I am going on vacation");
Assert.assertEquals("I am going on vacation", enUsTranslation);
Strings ruStrings = new DefaultStrings.Builder("ru", () ->
LocalizedStringLoader.loadFromClasspath("strings")
).languageRangesSupplier(() -> LanguageRange.parse("fr;q=1.0,ru;q=0.25")).build();
String ruTranslation = ruStrings.get("I am going on vacation - MISSING KEY");
Assert.assertEquals("I am going on vacation - MISSING KEY", ruTranslation);
Strings ru2Strings = new DefaultStrings.Builder("en", () ->
LocalizedStringLoader.loadFromClasspath("strings")
).languageRangesSupplier(() -> LanguageRange.parse("fr;q=1.0,ru;q=0.25")).build();
String ru2Translation = ru2Strings.get("Hello, world!");
Assert.assertEquals("Приветствую, мир", ru2Translation);
}
项目:jooby
文件:Request.java
/**
* Get a list of locale that best matches the current request.
*
* The first filter argument is the value of <code>Accept-Language</code> as
* {@link Locale.LanguageRange} and filter while the second argument is a list of supported
* locales defined by the <code>application.lang</code> property.
*
* The next example returns a list of matching {@code Locale} instances using the filtering
* mechanism defined in RFC 4647:
*
* <pre>{@code
* req.locales(Locale::filter)
* }</pre>
*
* @param filter A locale filter.
* @return A list of matching locales.
*/
@Nonnull
List<Locale> locales(BiFunction<List<Locale.LanguageRange>, List<Locale>, List<Locale>> filter);
项目:jooby
文件:Request.java
/**
* Get a locale that best matches the current request.
*
* The first filter argument is the value of <code>Accept-Language</code> as
* {@link Locale.LanguageRange} and filter while the second argument is a list of supported
* locales defined by the <code>application.lang</code> property.
*
* The next example returns a {@code Locale} instance for the best-matching language
* tag using the lookup mechanism defined in RFC 4647.
*
* <pre>{@code
* req.locale(Locale::lookup)
* }</pre>
*
* @param filter A locale filter.
* @return A matching locale.
*/
@Nonnull
Locale locale(BiFunction<List<Locale.LanguageRange>, List<Locale>, Locale> filter);