我有一个安卓应用程序,我想翻译成塞尔维亚语,我想要语言的两种变体:与拉丁字母和西里尔字母。我尝试了这些变体:value-sr-rRS-Latn , value-sr-Latn , value-sr-rRS-Cyrl , value-sr-Cyrl
但这些都不起作用。我得到这个错误:android-apt-compiler: [NAMEOFAPP] invalid resource directory name: [path]res/value-sr-rRS-Latn
在Android关于res dirs和Locale的文档中我找不到这个选项。
我可以用2种语言变体制作2个dirs吗?以及如何?
谢谢
自Android 7.0以来,塞尔维亚语与拉丁脚本已被正式包含。values-sr
仍用于西里尔字母,values-b+sr+Latn
用于拉丁字母。
values-sr
for Cyrillicvalues-b+sr+Latn
for Latin
我刚刚测试了Android本地化,我发现你可以使用任意区域,它将工作。
在项目中添加一个名为values-sr-rZZ
的文件夹,其中ZZ是一个从未存在过的虚构区域。
然后将以下代码添加到Application类,我从这里得到它并稍微更改:
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Resources res = this.getResources();
Configuration conf = res.getConfiguration();
boolean isLatinAlphabet = PreferenceManager.getDefaultSharedPreferences(this)... // get a value from the application settings
if(conf.locale.getLanguage().equals("sr") && isLatinAlphabet) {
conf.locale = new Locale("sr", "ZZ");
res.updateConfiguration(conf, res.getDisplayMetrics());
}
}
}
在这段代码中,只有当用户选择塞尔维亚语作为默认语言(conf.locale.getLanguage().equals("sr")
)并勾选应用程序首选项(isLatinAlphabet
)中的某些复选框时,区域设置才会更改。
您可以使用不同的条件,并根据自己的喜好进行更改。
同样,这种动态改变语言的方式可能会在旧设备上的菜单项中出现错误,但在新设备上不会重现。