1

我被困在这两天我希望我能找到一个解决方案。我正在尝试本地化我的应用程序(阿拉伯语和英语)本地化机制运行良好,单词,布局方向运行良好,但是有有两件事没有被本地化,第一个是数字。数字没有本地化为阿拉伯语。第二个是字体样式字体样式也没有被本地化。 但是它会将字体样式和数字更改为阿拉伯语,前提是我使用我的 USB 重新安装了应用程序并且在安装之前配置为阿拉伯语。这是我的代码

public static void changeLocale(Activity context, Bundle... bundles) {

        MedfastSharedPreferencesHelper sharakehSharedPreference = new MedfastSharedPreferencesHelper(context);
        String lang = sharakehSharedPreference.getKey("locale");
        Locale locale = null;
        if (null == lang) {
            locale = new Locale(Resources.getSystem().getConfiguration().locale.getLanguage());
            lang = locale.getDisplayLanguage();
            if (locale.getDisplayLanguage().equalsIgnoreCase("English")) {
                locale = new Locale("ar");
                lang = "ar";
            } else {
                locale = new Locale("en");
                lang = "en";
            }

        } else if (lang.equalsIgnoreCase("ar")) {
            lang = "en";
            locale = new Locale("en");

        } else if (lang.equalsIgnoreCase("en")) {
            lang = "ar";
            locale = new Locale("ar");

        }
        sharakehSharedPreference.setKey("locale", lang);
        Resources resources = context.getResources();
        DisplayMetrics displayMetrics = resources.getDisplayMetrics();

        Locale.setDefault(locale);
        Configuration configuration = resources.getConfiguration();
        configuration.setLocale(locale);
        configuration.locale = locale;
        resources.updateConfiguration(configuration, displayMetrics);
        Intent intent = new Intent(context, ((Activity) context).getClass());
        if (null != bundles && bundles.length > 0 && null != bundles[0])
            intent.putExtras(bundles[0]);
        context.startActivity(intent);
        context.finish();
    }
4

2 回答 2

1

经过研究,android不支持字体作为资源,所以我确实创建了6个类来自定义我的字体并检查语言环境是阿拉伯语还是英语,并且根据语言环境我加载字体,不像android中的drawable

于 2020-04-04T01:31:07.210 回答
0

嘿,正如 Basil Battikhi 所说,字体不适用于数字,但有一些解决方案:

1:创建您自己的自定义 textView 以便能够更改您想要的内容。

2:在strings.xml中定义这个

<string name="number">%1d</string>

并将数字设置为您的 textView,如下所示:

textCoin.text = getString(R.string.number, it)

3:您可以使用此代码为数字格式化 textView:

public static String convertEngNumToFa(String number) {
    if (AppConstants.FA_LOCALE == DataManager.Language.fa) {
        StringBuilder res = new StringBuilder();
        try {
            for (char _ch : number.toCharArray()) {
                if ((int) _ch > 47 && (int) _ch < 58) {
                    int x = (int) _ch + 1632 - 48;
                    char ch = (char) (x);

                    res.append(Character.toString(ch));
                } else {
                    res.append(Character.toString(_ch));
                }
            }
        } catch (Exception e) {
            return res.toString();
        }
        return res.toString();
    } else return number;
}
于 2022-02-27T09:43:34.113 回答