1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.webkit; 18 19 import android.content.Context; 20 21 import java.lang.ref.SoftReference; 22 import java.util.Map; 23 import java.util.HashMap; 24 25 /** 26 * @hide 27 */ 28 public class L10nUtils { 29 30 // These array elements must be kept in sync with those defined in 31 // external/chromium/android/app/l10n_utils.h 32 private static int[] mIdsArray = { 33 com.android.internal.R.string.autofill_address_name_separator, // IDS_AUTOFILL_DIALOG_ADDRESS_NAME_SEPARATOR 34 com.android.internal.R.string.autofill_address_summary_name_format, // IDS_AUTOFILL_DIALOG_ADDRESS_SUMMARY_NAME_FORMAT 35 com.android.internal.R.string.autofill_address_summary_separator, // IDS_AUTOFILL_DIALOG_ADDRESS_SUMMARY_SEPARATOR 36 com.android.internal.R.string.autofill_address_summary_format, // IDS_AUTOFILL_DIALOG_ADDRESS_SUMMARY_FORMAT 37 com.android.internal.R.string.autofill_attention_ignored_re, // IDS_AUTOFILL_ATTENTION_IGNORED_RE 38 com.android.internal.R.string.autofill_region_ignored_re, // IDS_AUTOFILL_REGION_IGNORED_RE 39 com.android.internal.R.string.autofill_company_re, // IDS_AUTOFILL_COMPANY_RE 40 com.android.internal.R.string.autofill_address_line_1_re, // IDS_AUTOFILL_ADDRESS_LINE_1_RE 41 com.android.internal.R.string.autofill_address_line_1_label_re, // IDS_AUTOFILL_ADDRESS_LINE_1_LABEL_RE 42 com.android.internal.R.string.autofill_address_line_2_re, // IDS_AUTOFILL_ADDRESS_LINE_2_RE 43 com.android.internal.R.string.autofill_address_line_3_re, // IDS_AUTOFILL_ADDRESS_LINE_3_RE 44 com.android.internal.R.string.autofill_country_re, // IDS_AUTOFILL_COUNTRY_RE 45 com.android.internal.R.string.autofill_zip_code_re, // IDS_AUTOFILL_ZIP_CODE_RE 46 com.android.internal.R.string.autofill_zip_4_re, // IDS_AUTOFILL_ZIP_4_RE 47 com.android.internal.R.string.autofill_city_re, // IDS_AUTOFILL_CITY_RE 48 com.android.internal.R.string.autofill_state_re, // IDS_AUTOFILL_STATE_RE 49 com.android.internal.R.string.autofill_address_type_same_as_re, // IDS_AUTOFILL_SAME_AS_RE 50 com.android.internal.R.string.autofill_address_type_use_my_re, // IDS_AUTOFILL_USE_MY_RE 51 com.android.internal.R.string.autofill_billing_designator_re, // IDS_AUTOFILL_BILLING_DESIGNATOR_RE 52 com.android.internal.R.string.autofill_shipping_designator_re, // IDS_AUTOFILL_SHIPPING_DESIGNATOR_RE 53 com.android.internal.R.string.autofill_email_re, // IDS_AUTOFILL_EMAIL_RE 54 com.android.internal.R.string.autofill_username_re, // IDS_AUTOFILL_USERNAME_RE 55 com.android.internal.R.string.autofill_name_re, // IDS_AUTOFILL_NAME_RE 56 com.android.internal.R.string.autofill_name_specific_re, // IDS_AUTOFILL_NAME_SPECIFIC_RE 57 com.android.internal.R.string.autofill_first_name_re, // IDS_AUTOFILL_FIRST_NAME_RE 58 com.android.internal.R.string.autofill_middle_initial_re, // IDS_AUTOFILL_MIDDLE_INITIAL_RE 59 com.android.internal.R.string.autofill_middle_name_re, // IDS_AUTOFILL_MIDDLE_NAME_RE 60 com.android.internal.R.string.autofill_last_name_re, // IDS_AUTOFILL_LAST_NAME_RE 61 com.android.internal.R.string.autofill_phone_re, // IDS_AUTOFILL_PHONE_RE 62 com.android.internal.R.string.autofill_area_code_re, // IDS_AUTOFILL_AREA_CODE_RE 63 com.android.internal.R.string.autofill_phone_prefix_re, // IDS_AUTOFILL_PHONE_PREFIX_RE 64 com.android.internal.R.string.autofill_phone_suffix_re, // IDS_AUTOFILL_PHONE_SUFFIX_RE 65 com.android.internal.R.string.autofill_phone_extension_re, // IDS_AUTOFILL_PHONE_EXTENSION_RE 66 com.android.internal.R.string.autofill_name_on_card_re, // IDS_AUTOFILL_NAME_ON_CARD_RE 67 com.android.internal.R.string.autofill_name_on_card_contextual_re, // IDS_AUTOFILL_NAME_ON_CARD_CONTEXTUAL_RE 68 com.android.internal.R.string.autofill_card_cvc_re, // IDS_AUTOFILL_CARD_CVC_RE 69 com.android.internal.R.string.autofill_card_number_re, // IDS_AUTOFILL_CARD_NUMBER_RE 70 com.android.internal.R.string.autofill_expiration_month_re, // IDS_AUTOFILL_EXPIRATION_MONTH_RE 71 com.android.internal.R.string.autofill_expiration_date_re, // IDS_AUTOFILL_EXPIRATION_DATE_RE 72 com.android.internal.R.string.autofill_card_ignored_re, // IDS_AUTOFILL_CARD_IGNORED_RE 73 com.android.internal.R.string.autofill_fax_re, // IDS_AUTOFILL_FAX_RE 74 com.android.internal.R.string.autofill_country_code_re, // IDS_AUTOFILL_COUNTRY_CODE_RE 75 com.android.internal.R.string.autofill_area_code_notext_re, // IDS_AUTOFILL_AREA_CODE_NOTEXT_RE 76 com.android.internal.R.string.autofill_phone_prefix_separator_re, // IDS_AUTOFILL_PHONE_PREFIX_SEPARATOR_RE 77 com.android.internal.R.string.autofill_phone_suffix_separator_re, // IDS_AUTOFILL_PHONE_SUFFIX_SEPARATOR_RE 78 com.android.internal.R.string.autofill_province, // IDS_AUTOFILL_DIALOG_PROVINCE 79 com.android.internal.R.string.autofill_postal_code, // IDS_AUTOFILL_DIALOG_POSTAL_CODE 80 com.android.internal.R.string.autofill_state, // IDS_AUTOFILL_DIALOG_STATE 81 com.android.internal.R.string.autofill_zip_code, // IDS_AUTOFILL_DIALOG_ZIP_CODE 82 com.android.internal.R.string.autofill_county, // IDS_AUTOFILL_DIALOG_COUNTY 83 com.android.internal.R.string.autofill_island, // IDS_AUTOFILL_DIALOG_ISLAND 84 com.android.internal.R.string.autofill_district, // IDS_AUTOFILL_DIALOG_DISTRICT 85 com.android.internal.R.string.autofill_department, // IDS_AUTOFILL_DIALOG_DEPARTMENT 86 com.android.internal.R.string.autofill_prefecture, // IDS_AUTOFILL_DIALOG_PREFECTURE 87 com.android.internal.R.string.autofill_parish, // IDS_AUTOFILL_DIALOG_PARISH 88 com.android.internal.R.string.autofill_area, // IDS_AUTOFILL_DIALOG_AREA 89 com.android.internal.R.string.autofill_emirate // IDS_AUTOFILL_DIALOG_EMIRATE 90 }; 91 92 private static Context mApplicationContext; 93 private static Map<Integer, SoftReference<String> > mStrings; 94 setApplicationContext(Context applicationContext)95 public static void setApplicationContext(Context applicationContext) { 96 mApplicationContext = applicationContext.getApplicationContext(); 97 } 98 loadString(int id)99 private static String loadString(int id) { 100 if (mStrings == null) { 101 mStrings = new HashMap<Integer, SoftReference<String> >(mIdsArray.length); 102 } 103 104 String localisedString = mApplicationContext.getResources().getString(mIdsArray[id]); 105 mStrings.put(id, new SoftReference<String>(localisedString)); 106 return localisedString; 107 } 108 getLocalisedString(int id)109 public static String getLocalisedString(int id) { 110 if (mStrings == null) { 111 // This is the first time we need a localised string. 112 // loadString will create the Map. 113 return loadString(id); 114 } 115 116 SoftReference<String> ref = mStrings.get(id); 117 boolean needToLoad = ref == null || ref.get() == null; 118 return needToLoad ? loadString(id) : ref.get(); 119 } 120 } 121