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