Android 如何更改语言环境以使用拉丁语塞尔维亚语(而不是西里尔语塞尔维亚语)
塞尔维亚语有拉丁字母和西里尔字母。在Android的日期和时间选择器小部件中,显示的塞尔维亚地区的字母表似乎是西里尔语,如图所示 我想更改区域设置,以便android小部件使用拉丁塞尔维亚字母表 当前的语言/国家代码(产生西里尔语)分别为Android 如何更改语言环境以使用拉丁语塞尔维亚语(而不是西里尔语塞尔维亚语),android,locale,country-codes,Android,Locale,Country Codes,塞尔维亚语有拉丁字母和西里尔字母。在Android的日期和时间选择器小部件中,显示的塞尔维亚地区的字母表似乎是西里尔语,如图所示 我想更改区域设置,以便android小部件使用拉丁塞尔维亚字母表 当前的语言/国家代码(产生西里尔语)分别为sr和RS。因此,我的setLocale函数被称为 setLocale("sr", "RS"); 这是我不确定的部分-根据,拉丁塞尔维亚语的当地代码是sr\u Latn\u RS。然而,我两个都试过了 setLocale("sr_Latn", "RS");
sr
和RS
。因此,我的setLocale函数被称为
setLocale("sr", "RS");
这是我不确定的部分-根据,拉丁塞尔维亚语的当地代码是sr\u Latn\u RS
。然而,我两个都试过了
setLocale("sr_Latn", "RS");
//and
setLocale("sr_Latn_RS", "RS");
这两项都不起作用(没有变化,默认为英语)。根据Android文档,setLocale似乎需要两个字母代码
语言代码是两个字母小写的ISO语言代码(例如
ISO 639-1中定义的“en”)。国家代码是两个字母
ISO 3166-1定义的大写ISO国家代码(如“US”)。
变量代码未指定
那么,如何指定拉丁塞尔维亚语言环境代码呢?或者它不存在吗?您能使用下面的一个吗
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());
}
}
}
注意:在conf.locale=new locale(“sr”,“YourContryCode”)中替换您的YourContryCode
代码>行
Manifest.xml:
<application
android:name=".MyApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/application_name"
android:theme="@style/AppTheme">
...
</application>
...
希望这将对您有所帮助。在发布问题之前,请搜索您的查询。可以用其他相关形式回答
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());
我发现这两个答案适合你的问题
和
编辑
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;
}
}
我知道会有一个有效的方法来做这件事,但是你可能会得到你需要的方向,以获得可用区域设置的列表和你想要的区域设置。希望能有帮助
编辑-2(最终版)
您可以使用以下方法构造区域设置:
Locale locale = new Locale.Builder().setLanguage("sr").setRegion("RS").setScript("Latn").build();
setLocale(locale);
如果您只支持棒棒糖或更高版本,则前面的答案效果良好。然而,如果你用塞尔维亚语编码,你的许多用户群可能不会有它。这里有一个适用于新旧版本的解决方案
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;
}
私有静态语言环境塞尔维亚拉丁语言环境(){
Locale=null;
if(Build.VERSION.SDK\u INT
为了获得拉丁语言环境,我首先使用了下面的代码
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文件夹中。哈哈,好吧,标题有点误导,但我正在进行研究,以帮助你找到答案。Eric,你可以使用最后一次编辑。抱歉这么多的编辑谢谢你,我会试试这个。最后的代码和平需要API>=21,但我需要它的API 19。。。有什么解决办法吗?@cizola我刚刚添加了一个解决方案。如果你经常拉语言环境,你可能想缓存它,但是你只需要设置一次或者其他什么,这不应该是一个问题。