5

PackageManager.getApplicationLabel(ApplicationInfo)アプリケーション名を取得するために使用しています。ただし、この名前は、デバイスのロケール構成とアプリケーション リソース文字列によって変わる場合があります。

指定されたローカライズされたラベルを取得する (または存在しない場合は null を返す) 便利な方法があるのだろうか? のようなPackageManager.getApplicationLabel(ApplicationInfo info, Locale prefereLocale)

4

1 に答える 1

7

まず、ラベルを取得するためのアクションの順序を説明しましょう。

  1. 取得ApplicationInfo(アプリケーション情報にはpublic int labelRes- ラベルのリソース ID);
  2. そこから取得するアプリケーション リソースを取得labelResします - getResourcesForApplication()を使用します。
  3. 必要なロケールをResources取得して文字列を取得するように設定します (上記のすべての項目を実行する前に確認する必要があるnonLocalizedLabellabelResについては言及していないことに注意してください)。

コード自体は非常に単純です (例: アクティビティ クラスのコード):

    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!");
    }

次の出力が生成されます (2 番目の文字列ラベルは、コードから設定したロシア語ロケールです - '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 Галерея
于 2013-08-16T10:28:40.303 に答える