如何更改语言环境以使用拉丁语塞尔维亚语(而不是西里尔语塞尔维亚语)

时间:2016-03-08 20:06:58

标签: android locale country-codes

塞尔维亚语有拉丁语和西里尔语字母。在Android的日期和时间选择器小部件中,显示的塞尔维亚语区域字母似乎是西里尔字母,如此处所示。

enter image description here

我想更改区域设置,以便android小部件使用拉丁塞尔维亚语字母表。

当前语言/国家/地区代码(产生西里尔语)分别为mypage/([\d,?(all)]+) sr。因此,我的setLocale函数被称为

RS

这是我不确定的部分 - 根据localeplanet.com,拉丁塞尔维亚语的本地代码是setLocale("sr", "RS"); 。但是,我试过了两个

sr_Latn_RS

两者都不起作用(没有发生变化,默认为英语)。根据Android文档,看起来setLocale需要两个字母代码。

  

语言代码是两个字母的小写ISO语言代码(例如   as" en")由ISO 639-1定义。国家代码是两个字母   ISO 3166-1定义的大写ISO国家代码(例如" US")。   变量代码未指定。

那么如何指定拉丁语塞尔维亚语区域代码?或者它不存在?

4 个答案:

答案 0 :(得分:3)

如果您只支持Lollipop或更高版本,之前的答案效果很好。但是,如果您使用塞尔维亚语进行编码,那么您的许多用户群可能都不会拥有它。这是一个适用于新旧版本的解决方案。

private static Locale serbianLatinLocale(){

    Locale locale = null;
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        for (Locale checkLocale : Locale.getAvailableLocales()) {
            if (checkLocale.getISO3Language().equals("srp") && checkLocale.getCountry().equals("LATN") && checkLocale.getVariant().equals("")) {
                locale = checkLocale;
            }
        }
    } else {
        locale = new Locale.Builder().setLanguage("sr").setRegion("RS").setScript("Latn").build();
    }

    return locale;
}

答案 1 :(得分:1)

为了获得拉丁语言环境,我首先使用下面的代码。

new Locale.Builder().setLanguage("sr").setRegion("RS").setScript("Latn").build();

但是此解决方案在我的Android 5.1.1设备上不起作用(它仍然处于西里尔文状态)。所以我删除了这样的区域设置:

new Locale.Builder().setLanguage("sr").setScript("Latn").build();

并且您必须将用于塞尔维亚资源的字符串放在b + sr + Latn文件夹中。

答案 2 :(得分:0)

请在发布问题前搜索您的查询。可以用其他相关形式回答。

    Locale newLocale = new Locale("sr","RS");
    Configuration config = new Configuration();
    config.setLocale(newLocale);
    // using this to reference my Activity
    this.getBaseContext().getResources().updateConfiguration(config, this.getBaseContext().getResources().getDisplayMetrics());

我发现这两个答案适合您的查询 android custom date-picker SOlocale from english to french

修改

    Locale[] locales = Locale.getAvailableLocales();
    for(Locale locale : locales){
        if(locale.getCountry().equalsIgnoreCase("RS")
                && locale.getScript().equalsIgnoreCase("Latn"))
        {
            Configuration config = new Configuration();
            config.setLocale(locale);
            // using this to reference my Activity
            this.getBaseContext().getResources().updateConfiguration(config, this.getBaseContext().getResources().getDisplayMetrics());
            break;
        }
    }

我知道会有一种有效的方法,但是您可能会获得获取可用语言环境列表并获取所需语言环境所需的方向。希望它有所帮助

EDIT-2(最终)

您可以使用以下方法构建语言环境:

Locale locale = new Locale.Builder().setLanguage("sr").setRegion("RS").setScript("Latn").build();
setLocale(locale);

答案 3 :(得分:-1)

你能用下面的一个吗?

<span class="h4" translate-cloak  ng-show="(displayedEntries | filter : { type : { name: type.name}}).length == 0">{{'public.TABLE_NO_DATA'|translate}}</span>

注意:替换.translate-cloak { display: none !important; } 行中的public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Resources res = this.getResources(); Configuration conf = res.getConfiguration(); boolean isLatinAlphabet = PreferenceManager.getDefaultSharedPreferences(this); if(conf.locale.getLanguage().equals("sr") && isLatinAlphabet) { conf.locale = new Locale("sr", "YourContryCode"); res.updateConfiguration(conf, res.getDisplayMetrics()); } } }

<强>的Manifest.xml

YourContryCode

希望这会对你有所帮助。