如何在其他 activity 中创建多语言?

How to create multiple language in other activity?

在其他问题中,我有创建多种语言的答案。但并非在所有 activity/pages 应用程序中使用。如何更改其他 activity/page 中的语言?

我只有主要 activity/page 的代码,如何在其他 activity/page 中创建?

我使用此代码更改语言:

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(LocaleHelper.onAttach(newBase, "en"));
}

private void updateView(String lang) {
    Context context = LocaleHelper.setLocale(this, lang);
    Resources resources = context.getResources();

    navigation_view.getMenu().findItem(R.id.account).setTitle(resources.getString(R.string.menuAccount));
    navigation_view.getMenu().findItem(R.id.settingPassword).setTitle(resources.getString(R.string.menuSettingPass));
    navigation_view.getMenu().findItem(R.id.about).setTitle(resources.getString(R.string.menuAbout));
    navigation_view.getMenu().findItem(R.id.logout).setTitle(resources.getString(R.string.menuLogout));
    navigation_view.getMenu().findItem(R.id.login).setTitle(resources.getString(R.string.menuLogin));
}

我用这个触发器来更改语言:

Paper.book().write("language", "id");
updateView((String)Paper.book().read("language"));
navigation_view.getMenu().findItem(R.id.language_in).setVisible(false);
navigation_view.getMenu().findItem(R.id.language_en).setVisible(true);

源代码来自: source code full from EDMT Dev

将您的字符串资源放在不同的文件夹中:

  • /res/values/strings.xml
  • /res/values-en/strings.xml
  • /res/values-es/strings.xml
  • /res/values-jp/strings.xml

系统会根据您的语言环境自动加载适当的字符串资源。 您需要在所有活动中使用 attachBaseContext 方法。对于更简洁的代码,您可以使用 attachBaseContext 方法创建 BaseActivity class 并从此基础 class:

扩展所有活动
public class BaseActivity extends Activity {
    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(LocaleHelper.onAttach(newBase, "en"));
    }
    // ...
}

public class MyActivity extends BaseActivity {
    // ...
    private void updateView(String lang) {
        // all your code
    }
}

使用正确配置的资源创建一个新上下文,并将其作为应用程序的基础,并通过 attachBaseContext Activity。

public class App extends Application {

    @Override
    protected void attachBaseContext(Context base) {
       super.attachBaseContext(LocaleHelper.setLocale(base));
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
       super.onConfigurationChanged(newConfig);
       LocaleManager.setLocale(this);
    }
...

}

其他活动的基地activity

public abstract class BaseActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      .....
   }