You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Android应用默认语言改为阿拉伯语?代码异常求助

问题原因
  • 初始化顺序错误:setContentView在语言设置前执行,导致布局先以系统默认语言(英语)加载,之后才切换为阿拉伯语,出现延迟显示的问题。
  • 首次启动时loadLocale读取不到保存的语言值,传入空字符串调用setLocale,无法正确触发阿拉伯语设置。
修复方案

1. 调整初始化顺序

将语言设置逻辑移到setContentView之前,确保布局加载时已应用目标语言配置。

2. 优化语言设置逻辑

  • 处理空字符串场景,首次启动直接默认设置阿拉伯语
  • 移除重复的setLocale调用,避免冗余操作
  • 适配Android N及以上版本的API废弃问题

修改后的代码

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 先完成语言配置,再加载布局
    loadLocale();
    setContentView(R.layout.activity_main);

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    // 移除重复的setLocale("ar")调用
    .....
}

private void setLocale(String lan) {
    // 空字符串时默认设置阿拉伯语
    if (TextUtils.isEmpty(lan)) {
        lan = "ar";
    }
    Locale locale = new Locale(lan);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    // 适配Android 7.0+版本
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        config.setLocale(locale);
    } else {
        config.locale = locale;
    }
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    // 保存语言设置到SharedPreferences
    SharedPreferences.Editor editor = getSharedPreferences("Settings", MODE_PRIVATE).edit();
    editor.putString("My_Lang", lan);
    editor.apply();
}

public void loadLocale() {
    SharedPreferences prefs = getSharedPreferences("Settings", Activity.MODE_PRIVATE);
    String language = prefs.getString("My_Lang", "");
    setLocale(language);
}
额外注意事项
  • 确保res/values-ar/strings.xml文件存在且所有字符串资源已正确翻译,避免出现缺省的英语资源。
  • 如果应用包含多个Activity,建议在Application类的onCreate方法中统一设置语言,保证全局语言一致性,无需在每个Activity重复处理。

内容的提问来源于stack exchange,提问作者Llama Cookies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:14:56