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

org.apache.juneau.http.AcceptLanguage Maven / Gradle / Ivy

There is a newer version: 9.0.1
Show newest version
// ***************************************************************************************************************************
// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
// * with the License.  You may obtain a copy of the License at                                                              *
// *                                                                                                                         *
// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
// *                                                                                                                         *
// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
// * specific language governing permissions and limitations under the License.                                              *
// ***************************************************************************************************************************
package org.apache.juneau.http;

import static org.apache.juneau.http.Constants.*;

import org.apache.juneau.internal.*;

/**
 * Represents a parsed Accept-Language HTTP request header.
 *
 * 

* List of acceptable human languages for response. * *

Example
*

* Accept-Language: en-US *

* *
RFC2616 Specification
* * The Accept-Language request-header field is similar to Accept, but restricts the set of natural languages that are * preferred as a response to the request. * Language tags are defined in section 3.10. * *

* Accept-Language = "Accept-Language" ":" * 1#( language-range [ ";" "q" "=" qvalue ] ) * language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" ) *

* *

* Each language-range MAY be given an associated quality value which represents an estimate of the user's preference * for the languages specified by that range. * The quality value defaults to "q=1". * For example... *

* Accept-Language: da, en-gb;q=0.8, en;q=0.7 *

*

* ...would mean: "I prefer Danish, but will accept British English and other types of English." * *

* A language-range matches a language-tag if it exactly equals the tag, or if it exactly equals a prefix of the tag * such that the first tag character following the prefix is "-". * *

* The special range "*", if present in the Accept-Language field, matches every tag not matched by any other range * present in the Accept-Language field. * *

* Note: This use of a prefix matching rule does not imply that language tags are assigned to languages in such a way * that it is always true that if a user understands a language with a certain * tag, then this user will also understand all languages with tags for which this tag is a prefix. * The prefix rule simply allows the use of prefix tags if this is the case. * *

* The language quality factor assigned to a language-tag by the Accept-Language field is the quality value of the * longest language- range in the field that matches the language-tag. * *

* If no language- range in the field matches the tag, the language quality factor assigned is 0. * *

* If no Accept-Language header is present in the request, the server SHOULD assume that all languages are equally * acceptable. * *

* If an Accept-Language header is present, then all languages which are assigned a quality factor greater than 0 are * acceptable. * *

* It might be contrary to the privacy expectations of the user to send an Accept-Language header with the complete * linguistic preferences of the user in every request. * For a discussion of this issue, see section 15.1.4. * *

* As intelligibility is highly dependent on the individual user, it is recommended that client applications make the * choice of linguistic preference available to the user. * If the choice is not made available, then the Accept-Language header field MUST NOT be given in the request. * *

* Note: When making the choice of linguistic preference available to the user, we remind implementors of the fact that * users are not familiar with the details of language matching as described above, and should provide appropriate * guidance. * As an example, users might assume that on selecting "en-gb", they will be served any kind of English document if * British English is not available. * A user agent might suggest in such a case to add "en" to get the best matching behavior. * *

Additional Information
* */ public final class AcceptLanguage extends HeaderRangeArray { private static final Cache cache = new Cache(NOCACHE, CACHE_MAX_SIZE); /** * Returns a parsed Accept-Language header. * * @param value The Accept-Language header string. * @return The parsed Accept-Language header, or null if the string was null. */ public static AcceptLanguage forString(String value) { if (value == null) return null; AcceptLanguage a = cache.get(value); if (a == null) a = cache.put(value, new AcceptLanguage(value)); return a; } private AcceptLanguage(String raw) { super(raw); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy