2013-08-16 48 views
4

我使用PackageManager.getApplicationLabel(ApplicationInfo)来获取应用程序名称。但是这个名称可能会根据设备语言环境配置和应用程序资源字符串而改变。从PackageManager获取本地化标签名称的方法

所以我想知道是否有任何方便的方法来获得指定的本地化标签(或者如果不存在则返回null)?如PackageManager.getApplicationLabel(ApplicationInfo info, Locale prefereLocale)

回答

5

首先,让我们描述的动作,以获得标签:

  1. 获取ApplicationInfo(应用程序信息有public int labelRes - 标签的资源ID);
  2. 获取应用程序资源以从中检索labelRes - 使用getResourcesForApplication();
  3. 将必要的语言环境设置为获得Resources并检索字符串labelRes(请注意,我没有提及nonLocalizedLabel,在做所有上述项目之前应检查它们);

代码本身是很简单的(例如,从活动类代码):

PackageManager pm = getPackageManager(); 
    try { 
     ApplicationInfo galleryInfo = pm.getApplicationInfo("com.android.gallery3d", PackageManager.GET_META_DATA); 

     if (null != galleryInfo) { 
      final String label = String.valueOf(pm.getApplicationLabel(galleryInfo)); 

      Log.w(TAG, "Current app label is " + label); 

      final Configuration config = new Configuration(); 

      config.locale = new Locale("ru"); 

      final Resources galleryRes = pm.getResourcesForApplication("com.android.gallery3d"); 

      galleryRes.updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 

      final String localizedLabel = galleryRes.getString(galleryInfo.labelRes); 

      Log.w(TAG, "Localized app label is " + localizedLabel); 
     } 
    } catch (PackageManager.NameNotFoundException e) { 
     Log.e(TAG, "Failed to obtain app info!"); 
    } 

产生下面的输出(第二个字符串标签中,我从代码中设置俄语语言环境 - “RU”):

08-16 19:23:04.425: WARN/MyActivity(29122): Current app label is Gallery 
08-16 19:23:04.425: WARN/MyActivity(29122): Localized app label is Галерея 
+0

是的,这就是我想要的!谢谢:) – mianlaoshu