AndroidLocale.java revision 82c7fdb1f6346862de373c95c618e370f81d8df6
1857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta/* 2857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * Copyright (C) 2014 The Android Open Source Project 3857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * 4857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * Licensed under the Apache License, Version 2.0 (the "License"); 5857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * you may not use this file except in compliance with the License. 6857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * You may obtain a copy of the License at 7857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * 8857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * http://www.apache.org/licenses/LICENSE-2.0 9857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * 10857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * Unless required by applicable law or agreed to in writing, software 11857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * distributed under the License is distributed on an "AS IS" BASIS, 12857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * See the License for the specific language governing permissions and 14857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * limitations under the License. 15857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta */ 16857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta 175cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Guptapackage com.android.layoutlib.bridge.android; 18857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta 1982c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Guptaimport com.android.layoutlib.bridge.impl.RenderAction; 2082c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta 21d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Guptaimport android.icu.util.ULocale; 22857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta 23d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Guptaimport java.util.Locale; 24857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta 25857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta/** 265cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta * This class provides an alternate implementation for {@code java.util.Locale#toLanguageTag} 275cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta * which is only available after Java 6. 28857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta * 295cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta * The create tool re-writes references to the above mentioned method to this one. Hence it's 305cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta * imperative that this class is not deleted unless the create tool is modified. 31857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta */ 325cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta@SuppressWarnings("UnusedDeclaration") 335cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Guptapublic class AndroidLocale { 34857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta 355cd9dde5a2a77c5095f985186d8f03147fd22870Deepanshu Gupta public static String toLanguageTag(Locale locale) { 36857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta return ULocale.forLocale(locale).toLanguageTag(); 37857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta } 38b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta 39b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta public static String adjustLanguageCode(String languageCode) { 40b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta String adjusted = languageCode.toLowerCase(Locale.US); 41b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta // Map new language codes to the obsolete language 42b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta // codes so the correct resource bundles will be used. 43b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta if (languageCode.equals("he")) { 44b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta adjusted = "iw"; 45b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta } else if (languageCode.equals("id")) { 46b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta adjusted = "in"; 47b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta } else if (languageCode.equals("yi")) { 48b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta adjusted = "ji"; 49b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta } 50b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta 51b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta return adjusted; 52b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta } 53b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta 54b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta public static Locale forLanguageTag(String tag) { 55b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta return ULocale.forLanguageTag(tag).toLocale(); 56b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta } 57b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta 58b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta public static String getScript(Locale locale) { 59b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta return ULocale.forLocale(locale).getScript(); 60b80e42f93ff26984c410da0235dd10f463e5722aDeepanshu Gupta } 6182c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta 6282c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta public static Locale getDefault() { 6382c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta BridgeContext context = RenderAction.getCurrentContext(); 6482c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta if (context != null) { 6582c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta Locale locale = context.getConfiguration().locale; 6682c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta if (locale != null) { 6782c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta return locale; 6882c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta } 6982c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta } 7082c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta return Locale.getDefault(); 7182c7fdb1f6346862de373c95c618e370f81d8df6Deepanshu Gupta } 72857ba4af8519479298a671461cd6f5cace35b99bDeepanshu Gupta} 73