如何在 android 上的非英语语言环境中使用 strftime?

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

我正在编写一个应用程序,它调用一些 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 上失败并且只提供英文字符串。

android c locale strftime
© www.soinside.com 2019 - 2024. All rights reserved.