fixes for language filtering to support private-use subtags (#330)

This commit is contained in:
Georgy Litvinov 2022-12-08 11:18:08 +01:00 committed by GitHub
parent 020b9385f8
commit 81e12cc492
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 98 additions and 3 deletions

View file

@ -1,6 +1,7 @@
package edu.cornell.mannlib.vitro.webapp.rdfservice.filter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.logging.Log;
@ -12,6 +13,8 @@ import org.apache.commons.logging.LogFactory;
*/
public class AcceptableLanguages extends ArrayList<String>{
private static final String SEPARATOR = "-";
private static final String PRIVATE_USE_SUBTAG = "x";
private static final long serialVersionUID = 1L;
private static final Log log = LogFactory.getLog(AcceptableLanguages.class);
@ -25,9 +28,17 @@ public class AcceptableLanguages extends ArrayList<String>{
log.debug("Raw language strings:" + rawLanguageStrs);
for (String lang : rawLanguageStrs) {
this.add(lang);
String baseLang = lang.split("-")[0];
if (!lang.equals(baseLang) && !this.contains(baseLang)) {
this.add(baseLang);
String[] subtags = lang.split(SEPARATOR);
int length = subtags.length;
for (int i = 1; i < length; i++) {
int lastIndex = length - i;
if (PRIVATE_USE_SUBTAG.equals(subtags[lastIndex - 1])) {
continue;
}
String baseLang = String.join(SEPARATOR, Arrays.copyOfRange(subtags, 0, lastIndex));
if (!lang.equals(baseLang) && !this.contains(baseLang)) {
this.add(baseLang);
}
}
}
log.debug("Normalized language strings:" + this);