检查特定区域中是否存在资源

问题描述 投票:0回答:1

我正在做一个具有搜索功能的项目,但只有当搜索的标签翻译成设备语言时才启用。有什么方法可以检查特定区域设置中是否存在资源?我想避免硬编码哪些翻译可用。

android android-resources
1个回答
0
投票

根据评论的链接,我认为这是返回翻译后的字符串或 null 的方法

public static String getTranslatedString(Context currentContext, int id) {
    final String DEFAULT_AUTHOR_LOCALE = "en-US";
    Locale currentLocale = currentContext.getResources().getConfiguration().getLocales().get(0);
    Locale authorsLocale = new Locale(DEFAULT_AUTHOR_LOCALE);
    final String stringInCurrentLocale = currentContext.getResources().getString(id);
    if (authorsLocale.getLanguage().equals(currentLocale.getLanguage())) {
        Log.d(TAG, "When running in the author's locale, we are properly translated");
        return stringInCurrentLocale;
    } else {
        Log.d(TAG, "When running in " + currentLocale + " see if we're different from the author's locale");
        Configuration configuration = new Configuration(currentContext.getResources().getConfiguration());
        configuration.setLocale(authorsLocale);
        Context authorsContext = currentContext.createConfigurationContext(configuration);
        String authorsOriginalString = authorsContext.getResources().getString(id);
        if (authorsOriginalString.equals(stringInCurrentLocale)) {
            return null;
        } else {
            return stringInCurrentLocale;
        }
    }
}

基本上,我们需要对编写代码和原始资源所用的语言进行硬编码。 然后我们可以将当前字符串与我们最初编写的字符串进行比较。

我找不到一种方法来优雅地处理 en-GB 与 en-US 的情况。当我们期望 null 时,上面的代码将返回 en-GB 中的“Select color”,因为它从未被翻译为“Select color”。我们可以更改代码来比较确切的区域设置,而不仅仅是底层语言,但对于美国和英国字符串相同的情况,这将是错误的。

© www.soinside.com 2019 - 2024. All rights reserved.