如何在其他 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);
将您的字符串资源放在不同的文件夹中:
- /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);
.....
}
在其他问题中,我有创建多种语言的答案。但并非在所有 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);
将您的字符串资源放在不同的文件夹中:
- /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);
.....
}