代码之家  ›  专栏  ›  技术社区  ›  Zordid

如何从APK版本中添加的库中轻松删除不必要的本地化资源

  •  16
  • Zordid  · 技术社区  · 12 年前

    我的应用程序非常简单,不需要大量本地化。

    我提供默认语言(英语)和德语-这是我一直想要并且将永远提供的,因为该应用程序完全专注于德国。

    当我最近添加了Google Play Services库时,我面临的问题是,正如Google Play Store告诉的那样,我的应用程序中添加了56种(!!!)其他语言。原因是:该库附带了许多我不想在我的应用中使用的语言资源。如果在剩下的只有英语/德语的情况下,用法语弹出Google Play对话框,这根本没有任何意义。

    我不想手动从库项目中删除资源,这很乏味,而且容易出错。另外,也许我会有另一个依赖于同一个库的应用程序,在那里我想要更多的语言?

    那么,我怎么才能做到这一点呢??

    谢谢

    1 回复  |  直到 12 年前
        1
  •  18
  •   Tano    10 年前

    我理解你的问题,简单的解决方案是从库中删除所有额外的语言,但是,你需要在每一个新版本的Google Play Services中都这样做,正如你所说,如果你在其他应用程序中需要其他语言,那不是最好的选择。

    相反,尝试强制应用程序使用德语或英语作为默认值:

    您需要在Application类中添加此代码

    @Override
    public void onCreate() {
        super.onCreate();
        avoidOtherLanguages();
        // your code here
    }
    
    @Override
    public void onConfigurationChanged() {
        super.onConfigurationChanged();
        avoidOtherLanguages();
        // your code here
    }
    
    public void avoidOtherLanguages() {
        if (!Locale.getDefault().getLanguage().equals(Locale.GERMAN.getLanguage()))
        {
            // when other than german, use english
            final Configuration configuration = getResources().getConfiguration();
            configuration.locale = Locale.ENGLISH;
            getResources().updateConfiguration( configuration, getResources().getDisplayMetrics() );
        }   
    }
    

    我希望它对你有用!

    ** 更新:解决方案 **

    嗨,在大量的谷歌搜索之后,想出一个解决方案!如果您正在使用 坡度,坡度 作为构建系统,您可以在 建筑物玻璃 文件:

       .....
       defaultConfig {
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 75
        versionName "1.0.0"
    
        resConfigs "en", "de"
    }
    ...
    

    使用 资源配置 为了告诉gradle您只使用这些语言环境配置,您的库中的所有其他语言都将从APK捆绑包中删除!

    如果这对你有用,请告诉我!