我正在编写一个应用程序,它调用一些 C 代码来处理一周中的几天和一年中的几个月。我想我会尝试变得聪明,并依靠 strftime() 来获取工作日和月份名称的本地化字符串。
这在 Linux 上运行良好,提供本地化字符串,但相同的 C 代码在 android 上失败,并且只提供这些字符串的英文版本。
在我的 C 程序中,我做了一个
setlocale("LC_ALL", ""); // clear the locale to get locale info from environment
strftime(....
当这不起作用时,我认为“这很奇怪”并尝试直接设置语言环境,两者都使用
setlocale("LC_ALL", "de_DE"); // the top entry in LocaleList.getDefault() in my emulator
setlocale("LC_ALL", "de_DE.UTF-8"); // because i thought that might help
但都返回 NULL,表示失败。
我认为这很奇怪,但果然,深入研究 https://android.googlesource.com/platform/ndk/+/0416568/sources/android/support/src/locale/setlocale.c#32 给我看
// Only accept "", "C" or "POSIX", all equivalent on Android.
if (*locale && strcmp(locale, "C") && strcmp(locale, "POSIX")) {
errno = EINVAL;
return NULL;
}
这绝对是我没想到会看到的东西!
所以我的问题是,如何使用 strftime() 获取本地化(非英语)工作日和月份名称?如果那根本不可能,还有其他方法可以在 android 上获取这些本地化字符串吗?
我不想在资源文件中指定它们,因为我知道这些字符串已经隐藏在系统的某个地方,我不想重新发明轮子。
setlocale("LC_ALL", "");
希望从环境中获取语言环境,并且 strftime() 返回本地化的字符串(就像在 Linux 上一样),但是在 android 上失败并且只提供英文字符串。