如何包含两种塞尔维亚语变体?拉丁文字母和西里尔字母

时间:2013-03-20 08:29:43

标签: 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种语言变体制作2个目录吗?怎么样?

谢谢

2 个答案:

答案 0 :(得分:2)

自Android 7.0以来,塞尔维亚语已经正式列入拉丁文。 values-sr仍用于西里尔字母,values-b+sr+Latn用于拉丁文字。

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

答案 1 :(得分:1)

我刚测试了Android本地化,我发现你可以使用任意区域,它会起作用。

在项目中添加一个名称为values-sr-rZZ的文件夹,其中ZZ是一个从未存在的虚构区域。

然后将以下代码添加到Application类中,我从here获取并略微更改:

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)中选中了一些复选框时,才会更改语言环境。

您可以使用其他条件并根据需要进行更改。

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