无法从Android中的区域特定文件夹中读取字符串

时间:2016-07-19 13:43:55

标签: android localization locale

我正在尝试覆盖我的应用中的区域设置配置。但是,我无法区分语言和他们的地区。

我正在尝试使用代码来覆盖语言环境。

让语言环境覆盖。

示例:" de_DE"," de_AT"

public static Locale getLocaleFromString(@NonNull final String locale) {

        String[] split = locale.split("_");

        if (split != null || split.length > 1) {
            String language = split[0];
            String country = split[1];

            return new Locale(language, language, country);
        }

        return Locale.getDefault();
    }

我的资源文件夹的结构是:

values/strings.xml    (default strings)
values-de-rDE/strings.xml
values-de-rAT/strings.xml

如果我定义了values-de / strings.xml,应用程序将从此文件夹开始读取。 这意味着区域设置覆盖在应用程序中工作,但是一些android系统如何无法从区域特定文件夹中读取字符串。

(我的设备语言是英语。)

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

传递给Location的构造函数的参数可能是错误的:
第二个应该是国家,第三个应该是变体。

所以getLocaleFromString应该这样:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Resources res = getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = getLocaleFromString("de_DE");
        res.updateConfiguration(conf, dm);

        setContentView(R.layout.activity_main);
    }

    public static Locale getLocaleFromString(@NonNull final String locale) {

        String[] split = locale.split("_");

        if (split != null || split.length > 1) {
            String language = split[0];
            String country = split[1];
            return new Locale(language, country);
        }

        return Locale.getDefault();
    }
}