Android 国际化不适用于某些 Android 设备

Android Internationalization not working for some Android devices

我有一个针对 SDK 版本 25 和最低 SDK 17 的 android 应用程序。该应用程序应该支持 4 种语言:法语, 斯瓦希里语英语基隆迪语

但对于某些 android 设备,所有四种语言都可以正常工作,但对于其他一些设备,当用户切换到 Kirundi 时,所有其他语言都可以正常工作。

这是我的代码:

public class LanguageSwitcher extends AppCompatActivity {

    //Variables declaration
    private TextView bdi,en,fr,sw;

    private Resources res;
    private DisplayMetrics dm;
    android.content.res.Configuration conf;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_language_switcher);


        bdi = (TextView)findViewById(R.id.bdi); //Kirundi textview
        fr  = (TextView)findViewById(R.id.fr); //francais textview
        en  = (TextView)findViewById(R.id.en); //english textview
        sw  = (TextView)findViewById(R.id.sw); //swahili textview


        res = getResources();
        dm  = res.getDisplayMetrics();
        conf= res.getConfiguration();


        //getting the sharedPreferences 
        SharedPreferences sharedPreferences=getSharedPreferences("profile", Context.MODE_PRIVATE);

        String lang = sharedPreferences.getString("lang","");

        final SharedPreferences.Editor editor = sharedPreferences.edit();

        bdi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                conf.locale = new Locale("rn"); // API 17+ only.
                editor.putString("lang","rn");
                editor.apply();
                res.updateConfiguration(conf, dm);
                startActivity(new Intent(getApplicationContext(),Acceuil.class));
            }
        });
        fr.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                conf.locale = new Locale("fr"); // API 17+ only.
                editor.putString("lang","fr");
                editor.apply();
                res.updateConfiguration(conf, dm);
                startActivity(new Intent(getApplicationContext(),Acceuil.class));
            }
        });
        sw.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                conf.locale = new Locale("sw"); // API 17+ only.
                editor.putString("lang","sw");
                editor.apply();
                res.updateConfiguration(conf, dm);
                startActivity(new Intent(getApplicationContext(),Acceuil.class));
            }
        });
        en.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                conf.locale = new Locale("en"); // API 17+ only.
                editor.putString("lang","en");
                editor.apply();
                res.updateConfiguration(conf, dm);
                startActivity(new Intent(getApplicationContext(),Acceuil.class));
            }
        });
    }
}

我不知道我的代码哪里错了。我需要你的帮助

在 onCreate() 之前设置你的语言 或 super.onCreate()

我们可以使用自定义字体。它们可以是 Downloadable Fonts or we can give Fonts in XML

您可以使用 this link 了解有关如何在 Android 应用程序 XML 中集成字体的更多信息。

基本上,我们可以在应用程序本身提供 ttfotf 文件,这样我们就可以在我们的应用程序中使用字体,而不是依赖于 OEM 字体。

在 Android 开发者网站上查看分步指南的链接。

我做了一些研究,发现与其他语言不同,基隆迪语资源应该在 res/values-rn-rBI 文件夹下,而不是 res/values-rn 文件夹下。 rn 作为 ISO 639-1 语言代码,与 Android 和 BI 中的任何其他语言一样 ISO 3166-1 Alpha -2 国家(布隆迪)的代码 并且有效。