【问题标题】:Change Android app language with out restarting the app using Restring library使用字符串库更改 Android 应用程序语言而不重新启动应用程序
【发布时间】:2020-06-21 13:17:49
【问题描述】:

我正在使用Restring 库在我的应用程序上加载本地化字符串。而且我能够从 api 加载本地化字符串并将其显示在应用程序上,没有任何问题。但是陷阱是每次切换语言时,我都必须重新启动应用程序,然后才在应用程序上更新语言。但我需要在不重新启动应用程序的情况下实现它。任何帮助表示赞赏。我已经提到了一些链接,我在下面提供,

https://proandroiddev.com/change-language-programmatically-at-runtime-on-android-5e6bc15c758

https://medium.com/@hamidgh/dynamically-change-bundled-strings-a24b97bfd306

Change app language programmatically in Android

注意:Restring 使用 SharedPreferences 作为字符串存储库,所以 当调用 getString(id) 方法时,它会提供字符串 匹配其 SharedPrefernces 存储库中的 id。

【问题讨论】:

    标签: android kotlin localization


    【解决方案1】:

    我建议在您的 android 应用架构中应用 View-Model,View-Model 的主要作用是在配置更改中存活下来(包括但不限于从横向到纵向的方向更改,反之亦然,在剧烈变化中存活下来)应用程序的性能统计数据(例如耗电等),因此您无需重新启动您的应用程序+另外使用可感知活动/片段的实时数据,因此它只会在应用程序处于前台时更新您的应用程序数据。

    有很多 YouTube 视频专门教这些东西,我建议观看“流中编码”YouTube 频道的 MVVM 架构。

    它肯定会让您了解如何继续使用您的应用,它只有 10 个视频长,但对于您的要求,前 5 个就足够了。

    【讨论】:

      【解决方案2】:

      您可以从这里使用新版本的 Restring(基于您正在使用的版本): https://github.com/B3nedikt/restring

      它包括一种无需重新启动即可更新您的活动的方法。 Restring.reword(rootView) 将查看“rootView”的所有子视图并更新字符串

         Restring.setLocale(Locale.FRENCH);
      
         // The layout containing the views you want to localize
      
         final View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
      
         Restring.reword(rootView);
      

      它还解释了如何确保每个活动在创建时都能获得所需的字符串: 在所有活动中,添加:

      @Override
      protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(ViewPumpContextWrapper.wrap(Restring.wrapContext(newBase)));    
      }
      
      @Override
      public Resources getResources() {
        return Restring.wrapContext(getBaseContext()).getResources();    
      }
      

      【讨论】:

      • 谢谢,我已经通过修改 Restring 库解决了这个问题。
      • @Gurupriyan 你能解释一下图书馆的修改吗?可以分享给我们吗?
      • @Gurupriyan 如何通过使用 API 调用从服务器获取字符串值来显示字符串值。你能指导我吗
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      相关资源
      最近更新 更多