Android获取指定语言字符串
由于近期应用加强了对多语言的适配,所以现在应用内有n种语言(10多种),然后统计的时候产品说只要上传英文的字符串.所以对于应用内的数据,在不修改语言的前提下,要将上传的字符串统一为英语.
废话不多说,直接附上代码
/*** Created by panruijie on 2017/12/26.* Email : zquprj@gmail.com*/
public class LanguageUtil {public static final String TAG = "LanguageUtil";private static final String APPNAME = "you app packagename";public static final String ERROR_LABEL = "";private static final String DEFAULT_COUNTRY = "US";private static final String DEFAULT_LANGUAGE = "en";public static String getStringByLocale(Context context, int stringId, String language, String country) {/*for (Locale locale : getAvailableLocales()) {String lang = locale.getLanguage();String coun = getCountryPrivate(locale);String localeStr = country.equals("") ? language : (language + "_" + country);Loger.w("ruijie", "language = " + lang + ", country = " + coun + "," +"localeStr = " + localeStr);}*/Resources resources = getApplicationResource(context.getApplicationContext().getPackageManager(),APPNAME, new Locale(language, country));if (resources == null) {return ERROR_LABEL;} else {try {return resources.getString(stringId);} catch (Exception e) {return ERROR_LABEL;}}}public static String getStringToEnglish(Context context, int stringId) {return getStringByLocale(context, stringId, DEFAULT_LANGUAGE, DEFAULT_COUNTRY);}private static Resources getApplicationResource(PackageManager pm, String pkgName, Locale l) {Resources resourceForApplication = null;try {resourceForApplication = pm.getResourcesForApplication(pkgName);updateResource(resourceForApplication, l);} catch (PackageManager.NameNotFoundException e) {}return resourceForApplication;}private static void updateResource(Resources resource, Locale l) {Configuration config = resource.getConfiguration();config.locale = l;resource.updateConfiguration(config, null);}}
思路在于通过应用名找到对于的应用的Resources,在不修改resources的前提下,不影响当前应用的语言,获取其资源.同理,只要知道其他应用的包名,可以获取其所有的字符串.
后来在测试种,给一个bean设置了一个字符串id,如R.string.appname:
Bean bean = new Bean();
bean.setId(R.string.appname);
这样进行设置之后,会发现错误.会抛出ResourceNotFoundException,这是因为对于字符串,或者图片drawable之类进行id获取,需要通过以下方法进行获取:
int stringId = context.getResources().getIdentifier(resourceId, "srting", "your package name");
int drawableId = context.getResources().getIdentifier(resourceId, "drawable", "your package name");
这样,经过这样的方法,我们可以轻松的拿到字符串了.用法如下:
String appName = LanguageUtil.getStringToEnglish(context, stringId);
如果要获取指定国家和语言的字符串,同理,加入国家和语言即可:
String appName = LanguageUtil.getStringByLocale(context, stringId, “en”, “US”);
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
