我正在做一个具有搜索功能的项目,但只有当搜索的标签翻译成设备语言时才启用。有什么方法可以检查特定区域设置中是否存在资源?我想避免硬编码哪些翻译可用。
根据评论的链接,我认为这是返回翻译后的字符串或 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”。我们可以更改代码来比较确切的区域设置,而不仅仅是底层语言,但对于美国和英国字符串相同的情况,这将是错误的。