1/* GENERATED SOURCE. DO NOT MODIFY. */ 2// © 2016 and later: Unicode, Inc. and others. 3// License & terms of use: http://www.unicode.org/copyright.html#License 4/* 5 ******************************************************************************* 6 * Copyright (C) 2009-2014, International Business Machines Corporation and 7 * others. All Rights Reserved. 8 ******************************************************************************* 9 */ 10package android.icu.impl; 11 12import android.icu.util.ULocale; 13import android.icu.util.UResourceBundle; 14 15/** 16 * Static utility functions for probing resource tables, used by ULocale and 17 * LocaleDisplayNames. 18 * @hide Only a subset of ICU is exposed in Android 19 */ 20public class ICUResourceTableAccess { 21 /** 22 * Utility to fetch locale display data from resource bundle tables. Convenience 23 * wrapper for {@link #getTableString(ICUResourceBundle, String, String, String, String)}. 24 */ 25 public static String getTableString(String path, ULocale locale, String tableName, 26 String itemName, String defaultValue) { 27 ICUResourceBundle bundle = (ICUResourceBundle) UResourceBundle. 28 getBundleInstance(path, locale.getBaseName()); 29 return getTableString(bundle, tableName, null, itemName, defaultValue); 30 } 31 32 /** 33 * Utility to fetch locale display data from resource bundle tables. Uses fallback 34 * through the "Fallback" resource if available. 35 */ 36 public static String getTableString(ICUResourceBundle bundle, String tableName, 37 String subtableName, String item, String defaultValue) { 38 String result = null; 39 try { 40 for (;;) { 41 ICUResourceBundle table = bundle.findWithFallback(tableName); 42 if (table == null) { 43 return defaultValue; 44 } 45 ICUResourceBundle stable = table; 46 if (subtableName != null) { 47 stable = table.findWithFallback(subtableName); 48 } 49 if (stable != null) { 50 result = stable.findStringWithFallback(item); 51 if (result != null) { 52 break; // possible real exception 53 } 54 } 55 56 // if we get here, stable was null, or there was no string for the item 57 if (subtableName == null) { 58 // may be a deprecated code 59 String currentName = null; 60 if (tableName.equals("Countries")) { 61 currentName = LocaleIDs.getCurrentCountryID(item); 62 } else if (tableName.equals("Languages")) { 63 currentName = LocaleIDs.getCurrentLanguageID(item); 64 } 65 if (currentName != null) { 66 result = table.findStringWithFallback(currentName); 67 if (result != null) { 68 break; // possible real exception 69 } 70 } 71 } 72 73 // still can't figure it out? try the fallback mechanism 74 String fallbackLocale = table.findStringWithFallback("Fallback"); // again, possible exception 75 if (fallbackLocale == null) { 76 return defaultValue; 77 } 78 79 if (fallbackLocale.length() == 0) { 80 fallbackLocale = "root"; 81 } 82 83 if (fallbackLocale.equals(table.getULocale().getName())) { 84 return defaultValue; 85 } 86 87 bundle = (ICUResourceBundle) UResourceBundle.getBundleInstance( 88 bundle.getBaseName(), fallbackLocale); 89 } 90 } catch (Exception e) { 91 // If something is seriously wrong, we might call getString on a resource that is 92 // not a string. That will throw an exception, which we catch and ignore here. 93 } 94 95 // If the result is empty return item instead 96 return ((result != null && result.length() > 0) ? result : defaultValue); 97 } 98} 99