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

时间:2018-10-17 00:29:20

标签: java android android-resources

我有一个针对SDK版本25和最低SDK 17的android应用。该应用应以4种语言提供:法语斯瓦希里语,< strong>英语和基隆迪

但是对于某些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));
            }
        });
    }
}

我不知道我的代码哪里有问题。我需要你的帮助

3 个答案:

答案 0 :(得分:1)

我们可以使用自定义字体。它们可以是Downloadable Fonts,也可以是Fonts in XML

您可以使用this link来获取有关如何在Android App中将字体集成为XML的更多信息。

基本上,我们可以在应用程序本身中提供ttfotf文件,以便我们可以在应用程序中使用字体,而不必依赖OEM字体。

enter image description here

在Android Developer网站上查看分步指南的链接。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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