1   package org.daisy.pipeline.nlp;
2   
3   import java.util.Arrays;
4   import java.util.HashSet;
5   import java.util.Locale;
6   import java.util.Set;
7   import java.util.regex.Matcher;
8   import java.util.regex.Pattern;
9   
10  public class LanguageUtils {
11  	private static Pattern localePattern = Pattern
12  	        .compile("(\\p{Alpha}{2})(?:[-_](\\p{Alpha}{2}))?(?:[-_](\\p{Alnum}{1,8}))*");
13  
14  	public static Locale stringToLanguage(String lang) {
15  		//TODO: in Java7 we would use:
16  		//return Locale.forLanguageTag(lang)
17  		//=> this works with BCP47 tags, and should work with old tags from RFC 3066
18  
19  		Locale locale = null;
20  		if (lang != null) {
21  			Matcher m = localePattern.matcher(lang.toLowerCase());
22  			if (m.matches()) {
23  				locale = new Locale(m.group(1), m.group(2) != null ? m.group(2) : "");
24  			}
25  		}
26  		return locale;
27  	}
28  
29  	//lowercase ISO 639-2/T language codes (www.loc.gov/standards/iso639-2/php/English_list.php)
30  	private static Set<String> RightToLeft = new HashSet<String>(Arrays.asList("yid", "ara",
31  	        "jpr", "per", "fas", "peo", "heb"));
32  
33  	public static boolean isRightToLeft(Locale l) {
34  		return RightToLeft.contains(l.getISO3Language());
35  	}
36  
37  	// one can customize the punctuation/space symbols depending on the
38  	// given language.
39  
40  	public static String getFullStopSymbol(Locale lang) {
41  		return "! ";
42  	}
43  
44  	public static String getCommaSymbol(Locale lang) {
45  		return ", ";
46  	}
47  
48  	public static String getWhiteSpaceSymbol(Locale lang) {
49  		return " ";
50  	}
51  }