5

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

谢谢

4

2 回答 2

5

自 Android 7.0 起,正式包含了带有拉丁文字的塞尔维亚语。values-sr仍然用于西里尔字母,并values-b+sr+Latn用于拉丁字母。

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

于 2017-03-21T19:04:44.813 回答
1

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

向项目中添加一个文件夹,其名称类似于values-sr-rZZZZ 是一个从未存在的虚构区域。

然后将以下代码添加到 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

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

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

于 2013-03-20T18:39:42.080 回答