如何包含2种塞尔维亚语言的变体?与拉丁字母和西里尔字母

Dan*_*das 5 android android-resources

我有一个android应用程序,我想翻译成塞尔维亚语,我想要两种语言的变体:拉丁字母和西里尔字母。我尝试了这种变体: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

在关于res dirs和Locale的Android文档中,我找不到此选项。

我可以用两种语言变体制作2个dirs吗?如何?

谢谢

Lig*_*uff 5

从 Android 7.0 开始,正式收录了带有拉丁文字的塞尔维亚语。values-sr仍用于西里尔字母,values-b+sr+Latn用于拉丁字母。

values-sr西里尔文
values-b+sr+Latn拉丁文


vor*_*olf 2

我刚刚测试了 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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此代码中,仅当用户选择塞尔维亚语言作为默认语言 ( conf.locale.getLanguage().equals("sr")) 并且还选中了应用程序首选项 ( isLatinAlphabet) 中的某些复选框时,区域设置才会更改。

您可以使用不同的条件并根据需要进行更改。

此外,这种动态更改语言的方式可能会在旧设备上的菜单项中出现错误,但在较新的设备上不会重现。